![](/img/trans.png)
[英]LINQ to remove objects from a list of objects based on another list of objects
[英]LINQ / Objects howto remove items and add them to another list
我對對象使用Linq,並有一個問題。
實際工作量在后台作業中處理。
實際的工作量不應再用於其他任務。 更重要的是,處理實際工作項的方法可以非常快速地完成並給出結果,因此將全部工作負荷分配給工作項塊。
一次,我只處理列表中的前n個對象,因此,我將處理n個對象,然后將它們從工作項的完整列表中刪除。
Roughly:
int amount = 100;
List<WorkItem> actualWorkload = null;
lock(lockWorkload){ // complete Workload is filled in other thread
if (actualWorkload.Count > amount)
{
actualWorkload.AddRange(completeWorkload.Take(amount));
}
else
{
actualWorkload.AddRange(completeWorkload);
}
completeWorkload.RemoveAll(x => actualWorkload.Contains(x));
}
//do something with workitems Process(actualWorkload);
我的問題是:可以以某種方式組合“取用”和“取下”,以便僅一步就可以拿走物品並將其從列表中直接刪除嗎? 我搜索類似於BlockingCollection的“ Take”,它在返回項目時將其刪除。
即使會有允許這樣做的操作,在后台仍然需要刪除和添加它們。
但是也許您不需要兩個列表? 可能只有一個包含所有項目的列表,並且每個項目的狀態都設置為其他值或其他值。 但是,當然,我不知道您的確切情況,因此這可能不可行。
“ Take and remove”在我看來很像“ Dequeue”,所以也許您可以只使用Queue或ConcurrentQueue ?
但是,枚舉器不會從隊列中刪除項目,因此您必須自己反復調用Dequeue 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.