1

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

どうすればいいですか?

例:

HT1.Count = 500;

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

- 編集 -

ご存知のように、これの理由は、.MSG ファイルから PDF を生成しているためです。12GBのPDFを取得すると問題が発生するという問題がエンドユーザーに発生します:P

PDF を 250 のメッセージに分割してから、新しい PDF を開始する必要があります。したがって、順序は実際には問題ではなく、毎回同じレコードを返すことも重要ではありません。これは 1 回しか行われないためです。

4

3 に答える 3

2

私の賭けは、次のようなカスタム関数を実行することです。

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;
    }
}

ただし、キーの順序は保証されていないため、順序付けられていないオブジェクトのシーケンスが含まれる可能性があることに注意してください。

于 2009-05-13T18:00:36.590 に答える
1

他の人が述べているように、ハッシュテーブルを希望どおりに反復処理することはできません。一方、キーがその範囲内にある結果が必要な場合は、次のようにすることができます。

    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。ただし、考え方は同じです。

于 2009-05-13T18:16:35.583 に答える
0

ハッシュ テーブルのリファレンスを参照することをお勧めします。ハッシュテーブルは一般に順序付けられていないため、質問は無意味です。

于 2009-05-13T17:56:00.280 に答える