C#实现List<string>元素两两拼接排列 排除自拼接的非双重循环方法
问题说明
需求是对字符串列表生成所有非自身配对的两两拼接结果,最终合并为逗号分隔的字符串,排除元素自拼接的情况。
示例输入:
var myList = new List<string>{ "AB", "CD", "EF", "GK" };
预期输出:
var resultStr = "ABCD,ABEF,ABGK,CDAB,CDEF,CDGK,EFAB,EFCD,EFGK,GKAB,GKCD,GKEF";
简洁实现方式
直接使用LINQ即可实现,无需手写双重for/foreach循环,代码更简洁易维护。
首先需要引入对应命名空间:
using System.Linq; using System.Collections.Generic;
方法1:方法链式写法(兼容所有支持LINQ的.NET版本)
var myList = new List<string>{ "AB", "CD", "EF", "GK" }; var resultStr = string.Join(",", myList.SelectMany((first, firstIdx) => myList.Where((second, secondIdx) => firstIdx != secondIdx) .Select(second => first + second) ) );
逻辑说明:
- 外层通过
SelectMany遍历每个元素作为拼接的第一个字符串,同时记录元素索引 - 内层遍历原列表,通过索引比对排除和外层元素位置相同的项,从根源避免自拼接(比判断字符串值相等更严谨,列表存在重复字符串时也不会误过滤)
- 拼接符合规则的字符串对,最后通过
string.Join合并为逗号分隔的最终结果,运行后和给出的预期输出完全一致。
方法2:LINQ查询表达式写法(.NET 6+ 推荐,可读性更高)
var resultStr = string.Join(",", from firstItem in myList.Select((val, idx) => (val, idx)) from secondItem in myList.Select((val, idx) => (val, idx)) where firstItem.idx != secondItem.idx select firstItem.val + secondItem.val );
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

