скопировать n k / v пар из Hashtable - PullRequest
1 голос
/ 13 мая 2009

У меня есть хеш-таблица с n количеством записей. Мне нужно скопировать записи между x и y и перебрать их.

Как бы я это сделал?

Пример:

HT1.Count = 500;

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

- изменить -

Просто, чтобы вы знали, причина в том, что я генерирую PDF из файлов .MSG. Проблема возникает для конечного пользователя, который, когда он получает PDF объемом 12 ГБ, вызывает проблемы: P

Мне нужно разбить PDF-файлы на 250 сообщений, а затем начать новый PDF. Так что порядок на самом деле не имеет значения, равно как и возврат одинаковых записей каждый раз, так как это будет сделано только один раз.

Ответы [ 3 ]

2 голосов
/ 13 мая 2009

Моя ставка будет выполнять пользовательскую функцию, такую ​​как:

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 голос
/ 13 мая 2009

Как уже говорили другие, вы не можете перебирать хеш-таблицу так, как вам кажется. Если, с другой стороны, вы хотите получить результат, когда ключи находятся в этом диапазоне, вы можете сделать что-то вроде этого:

    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, но идея будет такой же.

0 голосов
/ 13 мая 2009

Предлагаю вам обратиться к справке по хеш-таблицам. Хеш-таблицы обычно неупорядочены, поэтому ваш вопрос не имеет смысла.

...