簡體   English   中英

LINQ / 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”,所以也許您可以只使用QueueConcurrentQueue

但是,枚舉器不會從隊列中刪除項目,因此您必須自己反復調用Dequeue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM