0

我正在使用.AggregateaList<String>来连接每个项目。我需要找出迭代何时到达最后一项。我正在考虑测试,但如果值相同listOfStrings.Last() == currentString,列表中的最后一项可以等于任何其他项。

4

3 回答 3

2

为什么你需要知道这个?

我只是在猜测,但听起来您正在做类似于生成诸如“x,y,z”之类的字符串的事情,并且您不希望在最后一项之后使用逗号。

如果是这种情况,您可以string.Join(separator, items)改用。除非你想要符合“x, y & 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();
于 2012-07-24T09:38:03.397 回答
1

使用这个(只有一行代码):

int i = 0;
string strResult = listOfStrings.Where(s => ++i != listOfStrings.Count)
                                .Aggregate("", (current, s) => current + s);
于 2012-07-24T09:46:39.247 回答
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
   );
于 2012-07-24T09:50:26.857 回答