我如何计数元素直到找到N个好元素
本文关键字:元素 何计数 | 更新日期: 2023-09-27 18:15:59
我有一个集合
我想从它只投影前N个未删除的
但是我想计算有多少个元素(已删除和未删除)我遍历到第n个未删除元素。
我该怎么做?我想使用副作用:
int i;
collectiom.Skip(Convert.ToInt32(startIndex))
.TakeWhile( x=>
{
++i != 0;
return (!x.IsDeleted)
})
.Take(N);
但是编译器拒绝。现在我发现它并没有满足我的需要
TIA
这个怎么样:
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
的原始集合,只需交换Select
和Skip
调用。
你可以得到你想要的数字,像这样:
var numberProcessed = selected.Last().Index + 1;
一定要用linq吗?
这里有一个更理智的尝试:)
List<thing> result = new List<thing>();
collection.ToList().ForEach(x => {
if (!x.IsDeleted && i < N){
result.Add(x);
i++;
}
});
这个适合我:
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();