我很想在Linq(C#)中进行类似Haskell的快速聚合,将List转换为格式为“i ^ j ^ k ...”等的字符串。
这可能在一个查询中,或者我应该只使用旧的
foreach (int i in list)
{
string+= i + "^"
}
(p.s。是的,那是伪代码,不会编译。)
答案 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实例效率更高。