1

我有一个包含 n 条记录的哈希表。我需要复制 x 和 y 之间的记录并遍历它们。

我该怎么做?

例子:

HT1.Count = 500;

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

- 编辑 -

请注意,这样做的原因是我正在从 .MSG 文件生成 PDF。最终用户出现的问题是,当他们获得 12GB PDF 时会导致问题:P

我需要将 PDF 分解为 250 条消息,然后开始一个新的 PDF。所以顺序并不重要,每次返回相同的记录也不重要,因为它只会执行一次。

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 回答