假设我得到了一个项目列表:
[ 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(第一组),我可以使用涉及 totalPartitions
和 partitionNumber 的模运算的计算来获取列表
,但我在获取 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/