我在.Aggregate
上使用List<String>
来连接每个项目。我需要找出迭代何时触及最后一项。我正在考虑测试listOfStrings.Last() == currentString
,但如果值相同,列表中的最后一项可以等于任何其他项目。
答案 0 :(得分:2)
为什么你需要知道这个?
我只是在猜测,但听起来你正在做一些类似于生成字符串的内容,例如“x,y,z”,并且你不想在最后一项之后使用逗号。
如果是这种情况,您可以改用string.Join(separator, items)
。除非你想要一些符合“x,y&amp; z”形式的东西?
如果您确实需要使用Aggregate
,则可以关闭外部变量,例如:
int count = 0;
var aggregated = items.Aggregate(new StringBuilder(), (acc, item) =>
{
if (++count == items.Count)
{
// it's the last item
acc.Append("last");
}
else
{
acc.Append("not last, ");
}
return acc;
}).ToString();
答案 1 :(得分:1)
使用此(仅一行代码):
int i = 0;
string strResult = listOfStrings.Where(s => ++i != listOfStrings.Count)
.Aggregate("", (current, s) => current + s);
答案 2 :(得分:1)
这样的东西?
var count=listOfStrings.Count();
var result=listOfStrings.Aggregate(
new { i=0, v=String.Empty},
(x,y) => new { i=x.i+1, v=(x.i+1 == count) ? x.v + "&" + y : x.v+","+y},
x=>x.v
);