我有一个包含 n 条记录的哈希表。我需要复制 x 和 y 之间的记录并遍历它们。
我该怎么做?
例子:
HT1.Count = 500;
HT2 = HT1[0] - HT1[100];
- 编辑 -
请注意,这样做的原因是我正在从 .MSG 文件生成 PDF。最终用户出现的问题是,当他们获得 12GB PDF 时会导致问题:P
我需要将 PDF 分解为 250 条消息,然后开始一个新的 PDF。所以顺序并不重要,每次返回相同的记录也不重要,因为它只会执行一次。
我有一个包含 n 条记录的哈希表。我需要复制 x 和 y 之间的记录并遍历它们。
我该怎么做?
例子:
HT1.Count = 500;
HT2 = HT1[0] - HT1[100];
- 编辑 -
请注意,这样做的原因是我正在从 .MSG 文件生成 PDF。最终用户出现的问题是,当他们获得 12GB 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
,但想法是相同的。
我建议您查阅有关哈希表的参考资料。哈希表通常是无序的,所以你的问题毫无意义。