如何在循环后将不同数据的List与现有List按对应项合并?
解决方案
你的核心问题是误用了Zip的配对对象——你之前让outputs和自身配对,自然只会得到重复元素的拼接。正确的做法是让result和新的outputs按位置配对合并,同时区分第一次循环和后续循环的逻辑:
实现代码
List<string> result = new List<string>(); List<string> outputs = new List<string>(); // 模拟循环逻辑(替换成你实际的循环触发条件) for (int i = 0; i < 2; i++) { // 模拟填充outputs的逻辑(替换成你实际的数据加载代码) if (i == 0) { outputs.AddRange(new[] { "exampleData1", "exampleData2", "exampleData3" }); } else { outputs.AddRange(new[] { "exampleData1.1", "exampleData2.1", "exampleData3.1" }); } if (!result.Any()) { // 第一次循环:直接将outputs数据加入result result.AddRange(outputs); } else { // 后续循环:将result与outputs对应位置元素拼接 var mergedList = result.Zip(outputs, (existingItem, newItem) => $"{existingItem}, {newItem}").ToList(); result.Clear(); result.AddRange(mergedList); } // 清空outputs,准备下一次循环填充 outputs.Clear(); }
关键说明
- 第一次循环处理:当
result为空时,直接用AddRange将outputs的所有元素添加进去,完成初始化。 - 后续循环合并:使用
result.Zip(outputs, ...)将两个列表按索引位置配对,把每一对元素拼接成带逗号的字符串,生成新的合并列表后替换原result的内容。 - 注意事项:要确保每次循环中
outputs的元素数量和result的元素数量一致,否则Zip只会处理到两个列表中较短的那个的长度,多余元素会被忽略。如果存在数量不一致的场景,需要额外补充逻辑(比如给较短的列表补空字符串)。
内容的提问来源于stack exchange,提问作者Dr.rektalius
相关产品推荐
相关产品推荐

