gpt4 book ai didi

c# - 将 C# 集合拆分为相等的部分,保持排序

转载 作者:可可西里 更新时间:2023-11-01 08:41:00 25 4
gpt4 key购买 nike

我正在尝试将一个集合拆分为多个集合,同时保持我对集合的排序。我尝试使用以下扩展方法,但它错误地破坏了它们。基本上,如果我要查看集合中的项目,与合并的分解集合相比,顺序应该相同。这是我正在使用但不起作用的代码:

public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> list, int parts)
{
int i = 0;
var splits = from name in list
group name by i++ % parts into part
select part.AsEnumerable();
return splits;
}
  • int parts = 子枚举数

最佳答案

我不得不利用它来将一组对象以 4 个为一组进行比较......它将按照原始拥有的顺序保存对象。可以扩展以执行“列表”以外的操作

/// <summary>
/// Partition a list of elements into a smaller group of elements
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <param name="totalPartitions"></param>
/// <returns></returns>
public static List<T>[] Partition<T>(List<T> list, int totalPartitions)
{
if (list == null)
throw new ArgumentNullException("list");

if (totalPartitions < 1)
throw new ArgumentOutOfRangeException("totalPartitions");

List<T>[] partitions = new List<T>[totalPartitions];

int maxSize = (int)Math.Ceiling(list.Count / (double)totalPartitions);
int k = 0;

for (int i = 0; i < partitions.Length; i++)
{
partitions[i] = new List<T>();
for (int j = k; j < k + maxSize; j++)
{
if (j >= list.Count)
break;
partitions[i].Add(list[j]);
}
k += maxSize;
}

return partitions;
}

关于c# - 将 C# 集合拆分为相等的部分,保持排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3892734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com