繁体   English   中英

根据某些属性确定列表中的两个或多个对象是否相等

[英]Determine whether two or more objects in a list are equal according to some property

假设我有一个列表List<MyObject> myObjectList MyObject对象有一个名为Order的属性,其类型为int 如何使用LINQ-to-objects确定myObjectList中的两个或多个对象是否具有相同的Order

First GroupBy MyObject.Order然后确定是否有Any组有多个成员:

bool b = myObjectList.GroupBy(x => x.Order)
                     .Any(g => g.Count() > 1);
// b is true is there are at least two objects with the same Order
// b is false otherwise
bool hasDuplicates = myObjectList.Count >
    new HashSet<int>(myObjectList.Select(x => x.Order)).Count;

不是纯粹的Linq-To-Objects-Solution,但如何:

var ordersList = new List<Order>(myObjectList.Select(obj => obj.Order);
bool allUnique = ordersList.Count == new HashSet<Order>(ordersList).Count;

人们必须测试这里提出的所有方法的性能。 我要小心,否则你会很快找到一些缓慢的O(n²)查找。

Distinct怎么样?

bool allUnique = ordersList.Count == ordersList.Select(o => o.Order).Distinct().Count()

Count()方法采用谓词,所以你会做这样的事情:

if(myObjectList.Count(x => x.Order == 1) >= 2)
{
    // Do something
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM