如何在字典之间移动对象?

Cap*_*mic 5 .net c# algorithm collections

我有一个简单的任务,我需要检查一个字典中的对象,如果满足某些条件移动到另一个.我问的是,如果有一些好的模式,我可以使用语言功能来实现这一点.直接的方法很简单 - 使用临时收集,第一步确定canditates,第二步做实际移动.没关系,但不酷.

目前的代码

class Order
{
  public int ID;
  public bool IsReady;
}

Dictionary<int, Order> ActiveDictionary;
Dictionary<int, Order> ProcessedDictionary;

public Update()
{    
 // temporary list, uncool
 List<Order> processed = new List<Order>();


 // fist step
 foreach(Order ord in ActiveDictionary)
 {
  if(ord.IsReady)
  {
    processed.Add(ord);
  }
 }

 // ok now lets move
 foreach(Order ord in processed)
 {
  ActiveDictionary.Remove(ord.ID);
  ProcessedDictionary.Add(ord.ID, ord);
 }
}
Run Code Online (Sandbox Code Playgroud)

Rex*_*x M 7

你拥有的代码没有什么问题.

作为替代方案的练习,你可以做一些像...

ProcessedDictionary = ProcessedDictionary
    .Concat(
        ActiveDictionary.Where(kvp => kvp.Value.Ready)
    )
    .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

ActiveDictionary = ActiveDictionary.Where(kvp => !kvp.Value.Ready)
    .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
Run Code Online (Sandbox Code Playgroud)