如何将多个字符串列表与分隔符组合

时间:2018-03-29 07:22:36

标签: c# arrays string list

我有三个字符串列表,目的是将这些列表与带分隔符的单个字符串组合。

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

有没有简单的方法来生成最终的字符串?我用于循环,但似乎很难看。我知道C#string有Join方法将数组与分隔符组合在一起。如何将多个数组与分隔符组合?

以下是我的代码:

StringBuilder str = new StringBuilder();
for(int i=0; i< list1.count; i++)
{
    str.AppendFormat("{0}{1}{2} AND ", list1[i], list2[i], list3[i]);
}
str.Length = str.Length -5;
string final = str.ToString();

4 个答案:

答案 0 :(得分:22)

两次使用Linq Zip()

string result = string.Join(" AND ", list1.Zip(list2, (l1, l2) => l1 + l2).Zip(list3, (l2, l3) => l2 + l3));

https://dotnetfiddle.net/ZYlejS

答案 1 :(得分:10)

你可以使用string.Join和linq的组合:

string.Join(" AND ", list1.Select((e1, idx) => $"{e1} {list2[idx]} {list3[idx]}"));

答案 2 :(得分:3)

您可以使用MoreLINQ中的一个重载EquiZip()

var res = string.Join(" AND ", list1.EquiZip(list2, list3, (x, y, z) => x + y + z));

答案 3 :(得分:1)

您还可以使用string.JoinEnumerable.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]}"));