在列表中查找具有最低属性值的项目

Dav*_*ave 6 .net c# list

假设我有这个课程:

class Person {
   public int ID;
   public string Name;
}
Run Code Online (Sandbox Code Playgroud)

然后我有一份人员名单.

List<Person> persons = new List<Person>();
Run Code Online (Sandbox Code Playgroud)

其中充斥着很多随机的人.如何查询列表以获取ID最低的人?列表中的对象是随机顺序,因此ID最低的人可能不是第一个元素.我可以在不先排序列表的情况下实现此目的吗

Ham*_*jam 7

这是没有排序列表,只是迭代列表一次.

Person minIdPerson = persons[0];
foreach (var person in persons)
{
    if (person.ID < minIdPerson.ID)
        minIdPerson = person;
}
Run Code Online (Sandbox Code Playgroud)


Sel*_*enç 6

您可以使用MinByMore Linq库中的方法:

var person = persons.MinBy(x => x.ID);
Run Code Online (Sandbox Code Playgroud)

如果您不能使用第三方库,则可以先获取最小ID,然后再获取具有最小ID的人:

var minID = person.Min(x => x.ID);
var person = persons.First(x => x.ID == minID);
Run Code Online (Sandbox Code Playgroud)


gal*_*nus 5

使用LINQ的Min扩展方法:

persons.Min(p => p.ID)
Run Code Online (Sandbox Code Playgroud)

编辑:

遗憾的是,前面的方法仅返回最低的 ID,因此如果您只想使用内置 LINQ 方法,请执行以下操作:

persons.Aggregate(
    (personWithMinID, currentPerson) =>
        currentPerson.ID <= personWithMinID.ID ? currentPerson : personWithMinID)
Run Code Online (Sandbox Code Playgroud)