LINQ:如何将整数列表连接成逗号分隔的字符串?

Hao*_*est 37 c# linq aggregate

这可能是我错过的傻事,但我尝试连接整数列表而不是用以下内容求和:

integerArray.Aggregate((accumulator, piece) => accumulator+"," + piece)
Run Code Online (Sandbox Code Playgroud)

编译器抱怨参数错误.是否有一个光滑的方式来做到这一点,而不必经过一个循环?

Mar*_*ell 67

哪个版本的.NET?在4.0中你可以使用string.Join(",",integerArray).在3.5我会想要使用string.Join(",",Array.ConvertAll(integerArray,i=>i.ToString()));(假设它一个数组).否则,要么其设为数组,要么使用StringBuilder.

  • 奇怪的是,Join对StringBuilder更有效.我做了一个测试,大小为1,000,000,Join需要207ms,而StringBuilder需要264ms.我怀疑这是因为Join针对任务进行了优化,而SB针对一般情况进行了更优化. (4认同)
  • @Michael,关键的区别在于它在找到长度时可能需要一些中间数组和块副本。但在大多数情况下,你会没事的。 (2认同)

48k*_*ocs 16

您可能想要使用String.Join.

string.Join(",", integerArray.Select(i => i.ToString()).ToArray());
Run Code Online (Sandbox Code Playgroud)

如果您使用的是.Net 4.0,则无需经历重新启动数组的麻烦.而且可以做到

 string.Join(",", integerArray);
Run Code Online (Sandbox Code Playgroud)


Sam*_*uel 15

您得到的错误是因为您没有使用覆盖Aggregate,您可以指定种子.如果未指定种子,则使用集合的类型.

integerArray.Aggregate("", (accumulator, piece) => accumulator + "," + piece);
Run Code Online (Sandbox Code Playgroud)


tva*_*son 5

只是为了添加 @Marc 的另一种选择

var list = string.Join( ",", integerArray.Select( i => i.ToString() ).ToArray() );
Run Code Online (Sandbox Code Playgroud)