【问题标题】: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("{0}{1}{2} AND ", list1[i], list2[i], list3[i]);
}
str.Length = str.Length -5;
string final = str.ToString();

【问题讨论】:

  • 我意识到它并不能真正回答您的问题,但如果数据位于多 (2) 维数组中,您的问题可能会更容易解决;或者您的三个列表都包含在父列表中
  • 为此使用 for 循环绝对没问题。如果你真的觉得它看起来太丑了,你仍然可以将它包装成一个单独的方法来“隐藏”代码中的循环。
  • 您对所有内容都使用列表?为什么不使用具有OperatorVariableValue 属性的单个List&lt;Comparison&gt;?无需通过索引加入多个集合,这在大多数情况下都是需要重构的代码味道。此类可以覆盖 ToString 以返回您要求的内容。
  • str.Length = str.Length -5; 不起作用 str.Length 是只读的

标签: c# arrays string list


【解决方案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.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]}"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        • 1970-01-01
        • 2021-04-08
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多