如何在不做昂贵的情况下向List添加唯一对象!IEnumerable.Any()

时间:2013-09-18 09:39:11

标签: c# system.reactive

我通过Observable接收一系列对象。进入的对象可能是基于PartNumber属性的重复,所以我必须检查以确保我没有在列表中获得重复。我收到了数百万个零件编号,因此列表中的任何查询都是昂贵的,因此我们不希望频繁运行查询。

这是OnNext的实现

void OnNext(Product p)
{
 if (!products.Any(x => x.PartNumber.Equals(p))) /// Very costly query
 {
    products.Add(p);
 {
}

对于我收到的每一个对象,我必须运行那个代价高昂的查询,以确保我不添加重复项...有没有其他方法来挽救马力?

1 个答案:

答案 0 :(得分:3)

使用您自己的HashSet<T>,或者只使用Rx Distinct运算符(在内部使用HashSet):

productSource.Distinct(part => part.PartNumber).Subscribe(OnNext);