ハッシュテーブルからコピーn個のk / Vペア
-
21-08-2019 - |
質問
私は、レコードの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
)を使用していますが、考え方は同じになることに注意してください。
私はあなたがハッシュテーブルの参照を参照してください示唆しています。あなたの質問は意味がないので、ハッシュテーブルは、一般的に順序付けられています。
所属していません StackOverflow