我有一个很大的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();
}
}
这就是我做到的......我当时认为有一种比这更优雅的方式。 :(