2014-11-05 72 views
4

比方说,我有这个类:列表中查找与属性的最低值的项目

class Person { 
    public int ID; 
    public string Name; 
} 

然后,我有个人的名单。

List<Person> persons = new List<Person>(); 

这是充满了大量的随机人。如何查询列表以获取最低ID的人?列表中的对象是随机排列的,因此具有最低ID的人可能不是第一个元素。如果不先排序,我能实现吗?

回答

6

这没有对列表进行排序,只是迭代列表一次。

Person minIdPerson = persons[0]; 
foreach (var person in persons) 
{ 
    if (person.ID < minIdPerson.ID) 
     minIdPerson = person; 
} 
3

您可以使用MinBy方法从更多的LINQ库:

var person = persons.MinBy(x => x.ID); 

如果您不能使用第三方库,你可以先拿到分钟ID,然后获得具有最小ID的人:

var minID = person.Min(x => x.ID); 
var person = persons.First(x => x.ID == minID); 
+0

这不是没有先排序的列表。 – dotctor 2014-11-05 10:08:26

+0

我没有看到_without ordering_部分。无论如何我删除了orderby解决方案 – 2014-11-05 10:10:49

+0

第二个解决方案迭代列表两次 – dotctor 2014-11-05 10:11:57

2

使用LINQ的扩展方法:

persons.Min(p => p.ID) 

编辑:

我不好,前面的方法只返回最低的ID,所以如果你想只使用内置的LINQ的方法,在这里你去:

persons.Aggregate(
    (personWithMinID, currentPerson) => 
     currentPerson.ID <= personWithMinID.ID ? currentPerson : personWithMinID) 
+0

这不给指定的人 – dotctor 2014-11-05 10:08:58

+0

是的,你是对的... – galenus 2014-11-05 10:09:45