使用(i,j)=> i +"delimiter"+ j将List <int>聚合为字符串

Ed *_*mes 5 c# linq

我想在Linq(C#)中做一个类似Haskell的快速​​聚合,将List转换成格式为"i ^ j ^ k ..."等的字符串.

这可能在一个查询中,或者我应该只是做旧的fasioned

foreach (int i in list)
{
     string+= i + "^"
}
Run Code Online (Sandbox Code Playgroud)

(ps是的,那是伪代码,不会编译.)

Jon*_*eet 26

用途string.Join:

string.Join("^", list.Select(x => x.ToString()).ToArray())
Run Code Online (Sandbox Code Playgroud)

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

  • 同样,我不认为它不起作用.它不会改变任何东西,它只是将整数列表投射到字符串列表中,将项目列入数组,然后使用标准库方法 - 这也没有副作用.解决方案更容易理解,IMO - 并强调了如何知道在目标平台中执行操作的最简单/最好的方法,而不是依赖其他平台的习语. (4认同)
  • 它有什么不实用的地方?如果您确实愿意,您“可以”使用聚合,但它会更难看并且性能更差。 (2认同)

Guf*_*ffa 8

您可以使用聚合扩展:

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