使用(i,j)=&gt;将List <int>聚合为字符串i +“分隔符”+ j </int>

时间:2009-09-15 16:55:43

标签: c# linq

我很想在Linq(C#)中进行类似Haskell的快速​​聚合,将List转换为格式为“i ^ j ^ k ...”等的字符串。

这可能在一个查询中,或者我应该只使用旧的

foreach (int i in list)
{
     string+= i + "^"
}

(p.s。是的,那是伪代码,不会编译。)

4 个答案:

答案 0 :(得分:26)

使用string.Join

string.Join("^", list.Select(x => x.ToString()).ToArray())

在这种特殊情况下,可能更有效地直接使用StringBuilder,因为Append(int)可能会避免创建临时字符串。然而,除非事实证明这是一个瓶颈,否则我会坚持这个简单的单一表达。

答案 1 :(得分:6)

您可以使用聚合扩展程序:

string s = list.Aggregate<int, string>(String.Empty, (x, y) => (x.Length > 0 ? x + "^" : x) + y.ToString());

答案 2 :(得分:1)

在LINQ中肯定是可能的(请参阅语法的其他答案)。

但是,您可以考虑使用StringBuilder。

  

StringBuilder sb = new StringBuilder();
foreach (int i in list) sb.Append(i.ToString());

在你的情况下,更好的是:

  

String.Join("^", list.ToArray());

使用StringBuilder完成相同的工作。

答案 3 :(得分:0)

在这里使用StringBuilder实例效率更高。