c# - 给定总分区数和分区数对列表进行分区

标签 c# linq .net-3.5

假设我得到了一个项目列表:

[ A, B, C, D, E, F, G, H, I, J ]

我被要求将这些分成 3 个列表,然后取第二个列表:

[ A, B, C, D ] [ E, F, G ] [ H, I, J ]

我该怎么做?

我认为这个函数看起来像

public List<Item> SplitItems(
    List<Item> items, 
    int totalPartitions, 
    int partitionNumber) { }

如果 partitionNumber 为 1(第一组),我可以使用涉及 totalPartitionspartitionNumber 的模运算的计算来获取列表,但我在获取 partitionNumber 2 及以上的列表时遇到问题。


@Blorgbeard:这是我目前拥有的代码。同样,我只能处理第一个分区:

int itemsCount = items.Count;
int setCount = itemsCount/totalPartitions + ((itemsCount%totalPartitions >= partitionNumber) ? 1 : 0);
return webItems.Take(setCount).ToList();

最佳答案

int smallPartitionSize = list.Count / totalPartitions;
int remainder = list.Count % totalPartitions;
int selectedPartitionSize = smallPartitionSize + (partitionNumber <= remainder) ? 1 : 0;
var start = (partitionNumber - 1) * smallPartitionSize + Math.Min(remainder, partitionNumber - 1);
return list.Skip(start).Take(selectedPartitionSize);

关于c# - 给定总分区数和分区数对列表进行分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26149205/

相关文章:

c# - LINQ Group By 以及包含元素的列表的百分比

c# - 使用新名称从 .bak 文件恢复数据库

.net - 如何在 .NET 3.0 计算机上部署 ClickOnce .NET 3.5 应用程序?

c# - 字典的未记录功能?

c# - 如何将图像添加到用户控件?

c# - 用户输入到一个二维数组

c# - 无法在静态方法中创建静态变量?

c# - 重试 Visual Studio C# TestMethod

c# - 计算 2 个列表中存在的项目

.net - 如何在 LINQ to SQL 中编写此 T-SQL?