作为this question的一部分,反复指出我使用类似于此的代码遇到了O(n ^ 2)问题。

public class Foo
{
  public string IdentityValue {get;set;}
  public string Prop1 {get;set;}
  public string Prop2 {get;set;}

}

List<Foo> itemSet1 = GenerateLargeItemSet(); //makes a large list, > 5000 items for example
List<Foo> itemSet2 = GenerateLargeItemSet();

foreach (var itemFromSet1 in itemSet1)
{

  //does a corresponding item exist in itemSet2?
  var itemSet2Item = itemSet2.FirstOrDefault(i => i.IdentityValue == itemFromSet1.IdentityValue);

  if (itemSet2Item != null)
  {
    //do stuff to create item in the persistent store
  }
  else
  {
    //do stuff to update item in the persistent store
  }
}


在讨论字符串比较和并行化注意事项时,是否存在一种廉价且通用的方法(对象可能是T类型,Identity属性可能是其他类型)来减少O(n ^ 2)性质?

最佳答案

解决方案之一是使用具有复杂性的方法