2009-05-13 6 views
1

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

どうすればよいですか?

例:

HT1.Count = 500。

HT2 = HT1 [0] -HT1 [100];ちょうどあなたが認識しているよう--edit--

は、このための理由は、私が.MSGファイルからPDF年代を生成しています。エンドユーザが問題になるのは、エンドユーザが12GBのPDFを取得したときに問題が発生することです。P

PDFを250のメッセージに分割して新しいPDFを作成する必要があります。したがって、注文は本当に重要ではなく、毎回同じレコードを返すこともありません。これは一度だけ行われるためです。

答えて

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

しかし、キーの順序が保証されないことを考慮して、これは、オブジェクト

+1

ハッシュテーブルでカスタム関数を実装するのはなぜですか? GetEnumeratorでforeachを使用して列挙するだけでなく、HT2にn個の値を追加するのはなぜでしょうか。 – DevinB

+0

収量を使う必要はありません。 – DevinB

+0

これを行うことはできますが、実際にはハッシュテーブルの順序は異なります。毎回同じN個のアイテムを確実に提供することはできないかもしれません。もしそうであれば、今から1年後に同じアイテムをあなたに与えることはできません。 – mquander

0

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

+0

彼の質問はSQLのSELECT TOP(x)節になります。あなたは、データのサンプルを要求しています。必ずしもランダムでも順序付けでもなく、サンプルデータです。 – DevinB

+0

OK、私は自分の発言を修正する:ランダムにNを選択することができます。しかし、彼が質問を表現する方法(「xとyの間のレコードをコピーする」)は、データの特定の決定論的サブセットを探していることを暗示していたようです。 – mquander

1

の順不同のシーケンスを持つことができます他の人が述べているように、あなたが望むような方法でハッシュテーブルを反復することはできません。私が代わりに古いのジェネリック版(Dictionary)を使用しています

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

注:一方で、何がしたいことはキーがその範囲内にある結果であるならば、あなたはこのような何かを行うことができますHashtableしかし、考え方は同じです。

関連する問題