Magazine列表转含空值配对列表的技术问题咨询
解决Magazine列表转配对列表的奇数元素问题
我来帮你搞定这个问题~你现在的代码在处理奇数个Magazine元素时,因为用了input.Count / 2的整数除法,会直接漏掉最后一个元素,对吧?
问题根源
举个例子:如果input有5个元素,input.Count / 2会得到2(整数除法舍去小数),所以只会生成2组配对,第5个元素就被直接忽略了。
修改后的代码
只需要调整生成范围的逻辑,同时判断第二个元素是否存在,就能完美解决:
Magazines = Enumerable.Range(0, (input.Count + 1) / 2) .Select(i => { // 取当前组的第一个元素 var firstMagazine = input[i * 2]; // 判断第二个元素的索引是否在列表范围内,不在就传null var secondMagazine = i * 2 + 1 < input.Count ? input[i * 2 + 1] : null; // 用你的PeoplePair构造函数创建配对 return new PeoplePair(firstMagazine, secondMagazine); }).ToList();
代码解释
- 调整组数计算:
(input.Count + 1) / 2会自动适配奇数/偶数场景:- 偶数个元素(比如4个):
(4+1)/2 = 2,刚好生成2组 - 奇数个元素(比如5个):
(5+1)/2 = 3,生成3组,最后一组的第二个元素传null
- 偶数个元素(比如4个):
- 空元素处理:因为你的
PeoplePair构造函数已经处理了item2 ?? CreateEmptyModel(),所以传null的时候,会自动生成一个IsVisible=false的空Magazine,完全符合你的需求。
验证效果
假设input有3个Magazine元素:
- 第1组:
input[0]和input[1] - 第2组:
input[2]和构造的空Magazine(IsVisible=false)
这样所有元素都被正确加入配对列表啦~
内容的提问来源于stack exchange,提问作者Phill
相关产品推荐
相关产品推荐

