【问题标题】:Better ways to convert tuple list to string将元组列表转换为字符串的更好方法
【发布时间】:2016-04-28 14:13:59
【问题描述】:

我在以下结构中有一个列表:

Tuple<string, string>

像这样:

我想加入列表以形成如下字符串:

['A', '1'],['B', '2'], ['C', '3']...

我现在正在使用下面的代码来做:

string result = "";
for (int i = 0; i < list.Count; i++)
{
      result += "[ '" + list[i].Item1 + "', '" + list[i].Item2 + "'],";
}

代码工作正常,但想问是否有更好的方法来做到这一点?

【问题讨论】:

  • 取决于您所说的“更好”是什么意思。当然没有比这更好的了,除非您有数百万行并决定更改为 StringBuilder
  • 哦,我的意思是更容易阅读..或者这已经是最简单的写法了..?
  • 您可以使用 string.Format 和/或 Linq,但在我看来,这些都不是巨大的改进。
  • “更易于阅读”完全基于意见...我将使用String.Join(list, x=&gt; String.Format("['{0}','{1}']", x.Item1, x.Item2) 来表示您的确切代码。但由于我知道字符串 escape 大师 :) 我只使用 JSON 序列化程序来避免所有“如果其中一个元素中有引号怎么办”问题。
  • @AlexeiLevenkov 如果可能的话,我也想使用 JSON 序列化程序......但不幸的是它不是一个 json 字符串

标签: c# string


【解决方案1】:

您可以使用 Linq、string.Joinstring.Format 使其更紧凑:

result = string.Join(",", list.Select(t => string.Format("[ '{0}', '{1}']", t.Item1, t.Item2)));

【讨论】:

  • 我的更好,因为 'x' > 't' :)
  • ttuple :)
  • 是不是string.Format里面有错别字,目前第一个参数是t,没有意义
  • 是的,这是不正确的。没有可用的 string.Format(Tuple,string,int,int) 方法..
  • @FranckMesirard 谢谢,已修复。
【解决方案2】:

您可以像这样使用linqstring interpolation 来做到这一点:

string.Join(", ", list.Select(t => $"['{t.Item1}', '{t.Item2}']"));

【讨论】:

    【解决方案3】:

    Therearesomebenchmarking(注意:每个单词都包含一个链接,但我认为最好的参考之一是this。)关于如何加入string

    引用自参考:

    Rico Mariani,.NET 性能大师,an article 主题。这并不像人们想象的那么简单

    你可以特别看看string.Concatstring.Builder,它们通常比+ 运算符快。

    这里我使用string.Concat:

    string str = string.Concat(new string[] { "[ '", list[i].Item1, "', '", list[i].Item2, "']," });
    

    【讨论】:

      【解决方案4】:

      这也可能对你有用

      var input = new List<Tuple<string, string>> 
                      { 
                          Tuple.Create("A", "1"), 
                          Tuple.Create("B", "2"), 
                          Tuple.Create("C", "3") 
                      };
      string tpljoined = string.Join(", ", 
                              input.Select(x => "['" + x.Item1 + "','" + x.Item2 + "']"));
      

      【讨论】:

        【解决方案5】:

        您也可以使用 LINQ:

        var input = new List<Tuple<string, string>> { Tuple.Create("A", "1"), Tuple.Create("B", "2") };
        var result = String.Join(",", input.Select(elem => "[ '" + elem.Item1 + "', '" + elem.Item2 + "']"));
        Console.WriteLine(result);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多