如何将多个字符串列表与分隔符结合起来
Posted
技术标签:
【中文标题】如何将多个字符串列表与分隔符结合起来【英文标题】:How to combine multiple string list with separator 【发布时间】:2018-09-08 01:36:16 【问题描述】:我有三个字符串列表,目的是将这些列表组合成一个带有分隔符的字符串。
List<string> list1=new List<string>"A","B","C";
List<string> list2=new List<string>"=","<", ">";
List<string> list3=new List<string>"1","2","3";
最终输出如下:
A=1 AND B<2 AND C>3
有没有什么简单的方法可以生成最终的字符串?我使用了for循环,但它似乎很难看。我知道 C# 字符串有 Join
方法来组合数组和分隔符。如何用分隔符组合多个数组?
下面是我的代码:
StringBuilder str = new StringBuilder();
for(int i=0; i< list1.count; i++)
str.AppendFormat("012 AND ", list1[i], list2[i], list3[i]);
str.Length = str.Length -5;
string final = str.ToString();
【问题讨论】:
我意识到它并不能真正回答您的问题,但如果数据位于多 (2) 维数组中,您的问题可能会更容易解决;或者您的三个列表都包含在父列表中 为此使用 for 循环绝对没问题。如果你真的觉得它看起来太丑了,你仍然可以将它包装成一个单独的方法来“隐藏”代码中的循环。 您对所有内容都使用列表?为什么不使用具有Operator
、Variable
和Value
属性的单个List<Comparison>
?无需通过索引加入多个集合,这在大多数情况下都是需要重构的代码味道。此类可以覆盖 ToString
以返回您要求的内容。
str.Length = str.Length -5;
不起作用 str.Length
是只读的
【参考方案1】:
使用 Linq Zip()
两次:
string result = string.Join(" AND ", list1.Zip(list2, (l1, l2) => l1 + l2).Zip(list3, (l2, l3) => l2 + l3));
https://dotnetfiddle.net/ZYlejS
【讨论】:
【参考方案2】:您可以使用 string.Join 和 linq 的组合:
string.Join(" AND ", list1.Select((e1, idx) => $"e1 list2[idx] list3[idx]"));
【讨论】:
请注意所有列表确实具有相同的大小。【参考方案3】:您可以在MoreLINQ 中使用重载EquiZip()
之一:
var res = string.Join(" AND ", list1.EquiZip(list2, list3, (x, y, z) => x + y + z));
【讨论】:
【参考方案4】:您也可以像这样使用string.Join
和Enumerable.Range
的组合:
string result = string.Join(" AND ", Enumerable.Range(0, Math.Min(list1.Count,
Math.Min(list2.Count, list3.Count)))
.Select(i => $"list1[i] list2[i] list3[i]"));
如果保证列表具有相同的大小,则可以将其缩减为:
string b = string.Join(" AND ", Enumerable.Range(0, list1.Count)
.Select(i => $"list1[i] list2[i] list3[i]"));
【讨论】:
以上是关于如何将多个字符串列表与分隔符结合起来的主要内容,如果未能解决你的问题,请参考以下文章
pandas将dataframe中的多个字符串数据列的内容使用自定义分隔符拼接起来并生成新的数据列(combinine multiple string columns of dataframe)