2014-11-05 58 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

相關問題