我有一个系列。
我想从它预测只有前N个未被删除。
但是我想要计算多少元素(已删除和未删除) 我遍历了直到达到第N个未删除的元素。
我该怎么办? 我想用副作用:
int i;
collectiom.Skip(Convert.ToInt32(startIndex))
.TakeWhile( x=>
{
++i != 0;
return (!x.IsDeleted)
})
.Take(N);
但是编译器拒绝了。 现在我发现它无法满足我的需求
TIA
答案 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
开始统计原始馆藏,只需调换Select
和Skip
来电。
然后你可以得到你想要的号码:
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();