从Hashtable复制n k / v对

时间:2009-05-13 17:54:06

标签: c# hashtable enumerator

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

我该怎么做?

示例:

HT1.Count = 500;

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

- 编辑 -

您知道这一点的原因是我从.MSG文件生成PDF。最终用户遇到的问题是,当他们获得12GB的PDF时会导致问题:P

我需要将PDF分解为250的消息,然后启动一个新的PDF。因此,顺序并不重要,每次都不会返回相同的记录,因为它只会执行一次。

3 个答案:

答案 0 :(得分: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 :(得分: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,但这个想法是一样的。

答案 2 :(得分:0)

我建议您查阅有关哈希表的参考资料。哈希表通常是无序的,所以你的问题毫无意义。