如何计算元素直到找到N个好元素?

时间:2011-11-27 22:37:34

标签: c# .net linq

我有一个系列。

我想从它预测只有前N个未被删除。

但是我想要计算多少元素(已删除和未删除) 我遍历了直到达到第N个未删除的元素。

我该怎么办? 我想用副作用:

int i;
collectiom.Skip(Convert.ToInt32(startIndex))
            .TakeWhile( x=> 
{
++i != 0; 
return (!x.IsDeleted)
})
            .Take(N);

但是编译器拒绝了。 现在我发现它无法满足我的需求

TIA

3 个答案:

答案 0 :(得分:5)

这个怎么样:

var selected = collection.Select((x, i) => new {Item = x, Index = i})
                         .Skip(Convert.ToInt32(startIndex))  
                         .Where(x => !x.Item.IsDeleted)
                         .Take(N);

结果是一系列N个匿名对象,其中x.Item是原始对象,x.Index是原始集合中的索引。如果您想从startIndex开始统计原始馆藏,只需调换SelectSkip来电。

然后你可以得到你想要的号码:

var numberProcessed = selected.Last().Index + 1;

答案 1 :(得分:2)

整个事情必须与linq一起使用吗?

这是一个更安全的尝试:)

List<thing> result = new List<thing>();
collection.ToList().ForEach(x => {
   if (!x.IsDeleted && i < N){
      result.Add(x);
      i++;
   }
});

答案 2 :(得分:0)

这对我有用:

        IEnumerable<Thing> result = collectiom.TakeWhile((x, index) => {
            if (numNonDeleted == N)
                return false;
            if (!x.Deleted && ++numNonDeleted == N)
                numIveBeenThrough = index + 1;
            return true;
        }).Where(x => !x.Deleted).ToList();