【发布时间】:2011-02-24 10:40:20
【问题描述】:
这可能是我错过的一些愚蠢的事情,但我尝试连接一个整数列表,而不是用它们相加:
integerArray.Aggregate((accumulator, piece) => accumulator+"," + piece)
编译器抱怨参数错误。有没有一种巧妙的方法可以做到这一点而不必通过循环?
【问题讨论】:
这可能是我错过的一些愚蠢的事情,但我尝试连接一个整数列表,而不是用它们相加:
integerArray.Aggregate((accumulator, piece) => accumulator+"," + piece)
编译器抱怨参数错误。有没有一种巧妙的方法可以做到这一点而不必通过循环?
【问题讨论】:
.NET 的哪个版本?在 4.0 中,您可以使用 string.Join(",",integerArray)。在 3.5 中,我很想只使用 string.Join(",",Array.ConvertAll(integerArray,i=>i.ToString()));(假设它 是 一个数组)。否则,要么将其设为数组,要么使用StringBuilder。
【讨论】:
Array 类型,Array.ConvertAll(list.ToArray(),...) 与IEnumerable.Select(...).ToArray() 之间是否存在速度差异?
您遇到的错误是因为您没有使用 Aggregate 的覆盖来指定种子。如果不指定种子,则使用集合的类型。
integerArray.Aggregate("", (accumulator, piece) => accumulator + "," + piece);
【讨论】:
Aggregate 只不过是一个设置变量值的 foreach 循环。 - 那是 O(n) 而不是 O(n^2)?
integerArray.First() + integerArray.Skip(1).Aggregate("", (accumulator, piece) => accumulator + "," + piece);
只是为@Marc's 添加另一个替代品
var list = string.Join( ",", integerArray.Select( i => i.ToString() ).ToArray() );
【讨论】:
您可能想使用String.Join。
string.Join(",", integerArray.Select(i => i.ToString()).ToArray());
如果您使用的是 .Net 4.0,则无需经历具体化数组的麻烦。并且可以做到
string.Join(",", integerArray);
【讨论】: