更好的将元组列表转换为字符串的方法

7

我有一个如下结构的列表:

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,否则肯定没有任何显著性能提升。 - D Stanley
哦,我是说更易读的方式..或者这已经是最简单的写法了吗? - User2012384
3
我认为,您可以使用 string.Format 和/或 Linq,但在我看来,这两种方法都不能带来很大的改进。 - D Stanley
2
“更易读”完全是基于个人观点的……我的建议是使用String.Join(list, x=> String.Format("['{0}','{1}']", x.Item1, x.Item2)来表示你的精确代码。但由于我擅长字符串转义,我会直接使用JSON序列化器来避免所有可能出现的元素中含有引号的问题。 - Alexei Levenkov
@AlexeiLevenkov 如果可能的话,我也想使用JSON序列化器...但不幸的是它不是一个JSON字符串。 - User2012384
5个回答

21

您可以通过使用 Linq、string.Joinstring.Format 来使它更紧凑:

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

2
我的更好,因为 'x' > 't' :) - Alexei Levenkov
t,表示tuple :) - D Stanley
字符串格式化里面有个错别字吧,目前第一个参数是t,这没有意义。 - Franck Mesirard
是的,这不正确。没有可用的string.Format(Tuple,string,int,int)方法。 - jimmious
@FranckMesirard 谢谢,已修复。 - D Stanley

9
您可以使用linq字符串插值来完成此操作,示例如下:
string.Join(", ", list.Select(t => $"['{t.Item1}', '{t.Item2}']"));

2

这里 有一些 基准测试 (注意:每个单词都包含一个链接,但我认为最好的参考资料之一是这个),讲述了如何合并字符串。

引用自参考资料:

Rico Mariani,.NET 性能大师,撰写了一篇关于这个问题的文章。它“并不像人们想象的那么简单”。

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

这里我使用了 string.Concat

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

2
这可能也能为您解决问题。
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 + "']"));

1
你也可以使用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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接