我想通过指定每个分区中的元素数量将列表分区为列表列表。
例如,假设我有列表 {1, 2, ... 11},并且希望对其进行分区,使每个集合都有 4 个元素,最后一个集合填充尽可能多的元素。生成的分区将类似于 {{1..4}, {5..8}, {9..11}}
怎样写才是优雅的方式呢?
这是一个可以完成您想要的操作的扩展方法:
public static IEnumerable<List<T>> Partition<T>(this IList<T> source, Int32 size)
{
for (int i = 0; i < (source.Count / size) + (source.Count % size > 0 ? 1 : 0); i++)
yield return new List<T>(source.Skip(size * i).Take(size));
}
Edit:这是该函数的更简洁的版本:
public static IEnumerable<List<T>> Partition<T>(this IList<T> source, Int32 size)
{
for (int i = 0; i < Math.Ceiling(source.Count / (Double)size); i++)
yield return new List<T>(source.Skip(size * i).Take(size));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)