我是否可以访问内部的计数器变量.Aggregate?

时间:2012-07-24 09:34:00

标签: c# string list aggregate

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

3 个答案:

答案 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
   );