c# - 对 C# 哈希集进行切片

标签 c# arrays hashset slice

我有一个很大的 C# 哈希集,但无法一次处理全部内容。我需要提取具有给定大小的 block 。我知道我可以迭代哈希并将每个元素复制到可以稍后处理的数组/列表中,但是有没有更快/更优雅的方法来做到这一点?像单行一样的东西?

    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();
        }
    }

我就是这样做的...我在想还有比这更优雅的方法。 :(

最佳答案

没有任何内置内容。

但是,如果您使用 MoreLinq库(这是一个有用的东西),那么它有一个 Batch执行您想要的操作。

int batchSize = 1024;

foreach (var batch in myHashSet.Batch(batchSize))
{
    foreach (var item in batch)
    {
        ...
    } 
}

关于c# - 对 C# 哈希集进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21575053/

相关文章:

java - 如何在对象中存储 Set/HashSet?

c# - 替换字符串正则表达式中的日期

c# - lambda 相当于 collection.Count(predicate)

c# - 从 PrintPreview 创建的图形是纵向而不是横向?

sql - 使用 Postgres 在 json 数组中索引对象元素

java - 在 Java 中保存二进制 STL 文件

c# - WPF AvalonDock 添加文档

Javascript 嵌套 .map() 返回多个数组

Java Set 删除 "complex object"

java - 哈希集可以在内部使用一些其他集合而不是 HashMap 吗