У меня есть большой C# Hashset, и я не могу обрабатывать все это сразу. Мне нужно извлечь куски с заданным размером. Я знаю, что могу перебирать хэш и копировать каждый элемент в массив/список, который может быть позже обработан, но есть ли более быстрый/более элегантный способ сделать это? Что-то вроде одной строки?Slice a C# -Hashset
public static IEnumerable<T[]> Slice<T>(this HashSet<T> h, int size)
{
if (0 >= size)
{
throw new Exception("0 or negative slice sizes are not accepted!");
}
if (null == h || 0 == h.Count)
{
yield return new T[0];
yield break;
}
if (size >= h.Count)
{
yield return h.ToArray();
yield break;
}
List<T> to_ret = new List<T>(size);
foreach (T elem in h)
{
if (size == to_ret.Count)
{
yield return to_ret.ToArray();
to_ret.Clear();
}
to_ret.Add(elem);
}
if (0 < to_ret.Count)
{
yield return to_ret.ToArray();
to_ret.Clear();
}
}
Вот как я это сделал ... Я думал, что есть более элегантный способ, чем это. :(
есть какие-либо образцы кода? – Carra
не думаю, что это актуально. у меня есть HashSet с 200.000 строк, и мне нужно их все обрабатывать. Обработка всех 200k сразу не вариант. Так что, мне нужно принять все они в кусках 1k (скажем) и выполняют обработку. Я знаю, что могу написать свой собственный метод, который проходит через все 200k элементов и сохранить их в 1k буфере, а затем дать результат, но мой вопрос был, если это можно сделать с тем, что .net уже предлагает, что-то похожее на CopyTo. –
dcg