[英]how can I count elements till found N good elements?
我有一個集合。
我想從它預測只有前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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.