質問

私は、レコードのn個のハッシュテーブルを持っています。私は、xとyの間のレコードをコピーして、それらを反復処理する必要があります。

私はこれを行うだろうか?

例:

HT1.Count = 500;

HT2 = HT1 [0] - HT1 [100];

- 編集 -

あなたが認識しているだけので、このための理由は、私が.MSGファイルからPDF年代を生成しています。問題は、彼らが12ギガバイトのPDFを得るとき、それは問題を引き起こすことを、エンドユーザーのために発生する:P

私は、PDFの250のメッセージにを破るし、新しいPDFを開始する必要があります。だから、順序は本当に重要ではありません、どちらもそれは一度だけ実行されるように、毎回同じレコードを返しています。

役に立ちましたか?

解決

私の賭けは、このようにカスタム関数をやってます。

public IEnumerable<object> GetRange(Hashtable ht, int min, int max) {
    int i = 0;
    foreach (var key in ht.Keys) {
        i++;
        if (i > max) {
            yield break;
        }
        if (i >= min) {
            yield return ht[key];
        } else continue;
    }
}

ただし、キーの順序が保証されないことを考慮に入れるので、これはオブジェクトの順不同のシーケンスを持つことができます。

他のヒント

他の人が述べたように、

、あなたが望むように見える方法で、ハッシュテーブルを反復処理することができません。一方で、何がしたいことはキーがその範囲内にある結果がある場合、あなたはこのような何かを行うことができます:

    public IDictionary<int, T> GetRange<T>(
        IDictionary<int, T> source, int min, int max)
    {
        // add error checking for min,max, null, etc...
        int capacity = Math.Max(0, max - min);
        Dictionary<int, T> target = new Dictionary<int, T>(capacity);
        for (int key = min; key < max; key++)
        {
            if (source.ContainsKey(key))
            {
                target.Add(key, source[key]);
            }
        }
        return target;
    }

私が代わりに古いDictionaryのジェネリック版(Hashtable)を使用していますが、考え方は同じになることに注意してください。

私はあなたがハッシュテーブルの参照を参照してください示唆しています。あなたの質問は意味がないので、ハッシュテーブルは、一般的に順序付けられています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top