gpt4 book ai didi

c# - 将 List 分成大小相等的子列表 N

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:38 25 4
gpt4 key购买 nike

我正在尝试对字符串列表(大小为 N)进行切片,并根据被切片为相等部分 (X) 的列表返回一个范围。

例如,如果我有一个包含 10 个元素的列表,我的层数是 5。

元素 0 和 1 是第 1 层。元素 2 和 3 是第 2 层。在方法结束时,我返回参数中指定的层。

我遇到的问题是列表计数是否不能被层数整除。例如,23/5 = 4.6。所以这意味着它们将是 5 组,每组 4 个,然后剩下 3 个。我希望结果是 5、5、5、5、3 的 5 层(最后一层只有剩余的元素数)。

到目前为止,我已经包含了我的代码,但我真的很困惑如何确保列表大小尽可能相等以及如何处理余数。

// Gets a list and returns a range by the tier specified
public List<string> GetRangeByTierIndex(List<string> listToDivide, int numOfTiers, int tierIndexToGet)
{
int numOfElementsPerList = listToDivide.Count / numOfTiers;

int index = (tierToGet - 1) * numOfElementsPerList;

return listToDivide.GetRange(index, numOfElementsPerList);
}

注意:忘了说,我也不能为此使用 LINQ(AOT 和 iOS 问题)。

最佳答案

想法是使用模数,它是 listToDivide.Count 的除法余数通过 numOfTiers .如果该余数大于零,则索引小于或等于该余数的所有层将多一个元素。因此,还必须更正每一层的起始索引。请注意,我没有写任何检查(比如主列表中的元素数量是否为零、numOfTiers < tierIndexToGet 等...但您可以根据需要添加这些检查)。此外,对于您的示例,这将给出带有 5, 5, 5, 4, 4 的列表。元素而不是 5, 5, 5, 5, 3但我认为这更好。无论如何,我希望它能满足您的需求。代码应该类似于:

public List<string> GetRangeByTierIndex(List<string> listToDivide, int numOfTiers, int tierIndexToGet)
{
int remaining = listToDivide.Count % numOfTiers;
int numOfElementsPerList = listToDivide.Count / numOfTiers;
int index = (tierIndexToGet - 1) * numOfElementsPerList;
if (remaining > 0)
{
// most increase position of index because of numOfElementsPerList correction bellow
index += tierIndexToGet > remaining ? remaining : tierIndexToGet - 1;
// first 'remaining-th' tiers will have +1 element
numOfElementsPerList += tierIndexToGet <= remaining ? 1 : 0;
}
return listToDivide.GetRange(index, numOfElementsPerList);
}

关于c# - 将 List<string> 分成大小相等的子列表 N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26909920/

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