如何使用泛型制作通用的分块算法?

漫步者

我有两种在结构上非常相似的方法:

  public static List<List<NodeAttribute>> chunkList(List<NodeAttribute> list, int nSize = 30)
    {
        List<List<NodeAttribute>> chunkedList = new List<List<NodeAttribute>>();

        for (var i = 0; i < list.Count; i += nSize)
        {
            chunkedList.Add(list.GetRange(i, Math.Min(nSize, list.Count - i)));
        }

        return chunkedList;
    }

    public static List<List<int>> chunkList(List<int> list, int nSize = 30)
    {
        List<List<int>> chunkedList = new List<List<int>>();

        for (var i = 0; i < list.Count; i += nSize)
        {
            chunkedList.Add(list.GetRange(i, Math.Min(nSize, list.Count - i)));
        }

        return chunkedList;
    }

理想情况下,我希望有一个通用方法,该方法可以采用任何类型的List并返回该类型的List列表-而不是仅为我可能需要的每种对象类型添加方法。我知道可以使用泛型来执行此操作,但是如何使返回类型与输入相同的泛型呢?

埃里克·利珀特(Eric Lippert)

另一个答案很好地说明了如何使用参数多态性-您有两种在结构上相同且仅在类型上不同的方法,因此您可以通过制作由该类型参数化的方法来对其进行泛化。

但是,我们也可以借此机会退后一步,询问我们是否可以解决更一般的问题。假设您有一个序列(比列表更通用),并且希望将其分组为一系列序列。无需将自己限制在列表中;您可以按任何顺序执行此操作:

public static IEnumerable<IEnumerable<T>> Chunk(
  this IEnumerable<T> items, int size) 
{
  return items
    .Select((item, index) => new { Group = index / size, Item = item })
    .GroupBy(x => x.Group)
    .Select(group => group.Select(g => g.Item));
}

毕竟,如果您希望它成为列表的列表,那很容易。将最后一行更改为:

    .Select(group => group.Select(g => g.Item).ToList()).ToList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用泛型

来自分类Dev

如何使用泛型?

来自分类Dev

如何使用泛型

来自分类Dev

如何不带参数实现Init()?使用泛型枚举。无法推断通用参数“ T”。迅速

来自分类Dev

春天如何使用泛型?

来自分类Dev

如何在linq中将泛型写入实体的通用类型?

来自分类Dev

如何使用泛型返回泛型类的类类型?

来自分类Dev

当泛型具有默认值时,使用泛型制作struct的实例

来自分类Dev

java“泛型通用类型”

来自分类Dev

TTTD分块算法中使用的哈希函数?

来自分类Dev

如何使用泛型实现此功能?

来自分类Dev

如何使用类型的辅助类泛型

来自分类Dev

如何在HashMap中使用泛型?

来自分类Dev

如何使用泛型创建流畅的界面

来自分类Dev

为什么/如何动态使用泛型?

来自分类Dev

如何在Scala中使用泛型

来自分类Dev

如何使用泛型实现类型安全?

来自分类Dev

如何使用泛型实现Hibernate DAO

来自分类Dev

如何使用泛型作为枚举的键

来自分类Dev

如何使用泛型创建AutoValue类?

来自分类Dev

如何在接口上使用泛型

来自分类Dev

如何在Scala中使用泛型

来自分类Dev

如何使用泛型创建实例?

来自分类Dev

如何使用泛型设计多态类

来自分类Dev

如何使用泛型实现类型声明?

来自分类Dev

如何为 Holder 正确使用泛型

来自分类Dev

如何检查泛型K是否为泛型M的一部分。打字稿通用 Redux

来自分类Dev

通过泛型在java中制作泛型接口

来自分类Dev

如何制作通用链表