我们假设我有一组字符串,如下所示:
IList<string> myList = new List<string>(){"one", "two", "three"};
使用myList.Aggregate
我希望最终得到“'one','two','three'”(包括单引号)
有人只有使用聚合函数才能做到这一点吗?
我正在思考一些事情myList.Aggregate((increment, seed) => string.Concat(increment, ", ", seed));
但这只是解决方案的一半。
答案 0 :(得分:6)
使用Aggregate
而不是更简单的string.Join
的任何理由?
string joined = string.Join(", ", myCollection.Select(x => "'" + x + "'"));
(如果您使用的是.NET 3.5,请添加ToArray
电话。)
你可以使用string.Join
实现Aggregate
(理想情况下使用StringBuilder
),但这并不是非常令人愉快。假设一个非空的集合,我认为这应该这样做:
string csv = myCollection.Aggregate(new StringBuilder("'"),
(sb, x) => sb.AppendFormat("{0}', '"),
sb => { sb.Length -= 3;
return sb.ToString(); });
答案 1 :(得分:2)
由于您指定“仅使用聚合函数”,如何:
myCollection.Aggregate(string.Empty, (soFar, next) =>
soFar + (soFar == string.Empty ? soFar : ", ")
+ "'" + next + "'")
(或)
myCollection.Aggregate(string.Empty, (soFar, next) =>
string.Format("{0}{1}'{2}'",
soFar, soFar == string.Empty ? soFar : ", ", next))
以这种方式使用Aggregate
进行字符串连接但确实效率不高。
编辑:已更新,以摆脱领先的,
。