如何根据给定索引列表拆分有序列表为多个子列表?
按指定索引列表拆分有序列表的正确实现
要实现按给定索引列表拆分有序列表,核心逻辑是:每个子列表包含原列表中从当前索引开始,到下一个索引(不含)结束的元素,最后一个子列表则从最后一个索引延续到原列表末尾。
常见错误原因
你使用GetRange时大概率踩了这两个坑:
- 错误计算子列表长度:
GetRange的第二个参数是要截取的元素个数,不是结束索引,必须用下一个索引 - 当前索引来计算。 - 未处理最后一个子列表:最后一个索引没有后续索引,需以原列表的总长度作为结束边界。
正确代码实现(以C#为例)
假设原列表和索引列表如下:
List<int> originalList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; List<int> indexList = new List<int> { 0, 3, 8 };
拆分逻辑代码:
List<List<int>> subLists = new List<List<int>>(); for (int i = 0; i < indexList.Count; i++) { int currentStart = indexList[i]; // 确定子列表的结束边界(不含) int currentEnd = i < indexList.Count - 1 ? indexList[i + 1] : originalList.Count; // 计算要截取的元素个数 int takeCount = currentEnd - currentStart; // 截取并添加子列表 subLists.Add(originalList.GetRange(currentStart, takeCount)); }
验证示例
当索引列表为
0,3,8时:- 第一个子列表:截取3个元素 →
[1,2,3] - 第二个子列表:截取5个元素 →
[4,5,6,7,8] - 第三个子列表:截取2个元素 →
[9,10]
- 第一个子列表:截取3个元素 →
当索引列表为
0,2,8时:- 第一个子列表:截取2个元素 →
[1,2] - 第二个子列表:截取6个元素 →
[3,4,5,6,7,8] - 第三个子列表:截取2个元素 →
[9,10]
- 第一个子列表:截取2个元素 →
完全符合预期的拆分结果。
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

