【发布时间】:2014-02-05 10:47:14
【问题描述】:
我有一个很大的 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();
}
}
我就是这样做的……我在想还有比这更优雅的方法。 :(
【问题讨论】:
-
有代码示例吗?
-
不要认为它是相关的。我有一个带有 200.000 个字符串的 Hashset
,我需要全部处理它们。一次处理所有 200k 不是一种选择。所以,我需要把它们都分成 1k 块(比如说)并进行处理。我知道我可以编写自己的方法来循环遍历所有 200k 元素并将它们保存到 1k 缓冲区中然后产生结果,但我的问题是这是否可以使用 .net 已经提供的东西来完成,类似于 CopyTo 的东西。跨度>