скопировать n пар k/v из Hashtable
-
21-08-2019 - |
Вопрос
У меня есть хеш-таблица с n записей.Мне нужно скопировать записи между x и y и перебрать их.
Как бы я это сделал?
Пример:
HT1.Count = 500;
HT2 = HT1[0] - HT1[100];
--редактировать--
Чтобы вы знали, причина в том, что я генерирую PDF-файлы из файлов .MSG.Для конечного пользователя возникает проблема: когда он получает PDF-файл размером 12 ГБ, это вызывает проблемы: 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
, но идея будет та же.
Я предлагаю вам обратиться к справочнику по хэш-таблицам.Хэш-таблицы обычно неупорядочены, поэтому ваш вопрос бессмысленен.