从List中获取所需的对象

发布于 2024-11-02 13:02:16 字数 445 浏览 0 评论 0原文

假设我有一个类“Person”……

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

并且假设我有一个列表“listOfPerson”,其中包含15个人......

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

现在我试图从这个列表中获取对象人最大年龄......

仔细阅读我不仅仅需要最大年龄...... 但整个对象......所以我也可以访问最大年龄的人的名字......。

谢谢............

Suppose I have one class “Person”………

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

and suppose I have list “listOfPerson” which contain say 15 person…

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

Now I trying to get Object person form this List with Max Age…..

Read Carefully I an not just need Max Age……
but entire object….so I can also access the name of the person with max Age…….

Thanks………

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

回眸一笑 2024-11-09 13:02:16
Person oldest = listOfPerson.OrderByDescending(person => person.Age).First();

来自评论

假设我
说……所有拥有 max 的人
年龄...(最大年龄的人列表
从给定的人员名单中)?谢谢

在这种情况下,找到最大年龄然后对其进行过滤是值得的。有多种方法,但

int maxAge = listOfPerson.Max(person => person.Age);
var oldestPeople = listOfPerson.Where(person => person.Age == maxAge); // .ToList()

如果结果是列表而不是 IEnumerable 很重要,那么一种简单的方法是包含可选的 ToList() 扩展。

Person oldest = listOfPerson.OrderByDescending(person => person.Age).First();

From comments

And suppose i
say....all the person with max
age...(list of person with max Age
from given list of person)? Thanks

In this case, it's worth it to find the maximum age and then filter on it. There are various approaches, but a straightforward method is

int maxAge = listOfPerson.Max(person => person.Age);
var oldestPeople = listOfPerson.Where(person => person.Age == maxAge); // .ToList()

Include the optional ToList() extension if it's important that the result be a list instead of an IEnumerable<Person>.

绝對不後悔。 2024-11-09 13:02:16
listOfPerson.OrderByDescending(x=>x.Age).First();
listOfPerson.OrderByDescending(x=>x.Age).First();
べ繥欢鉨o。 2024-11-09 13:02:16

如果列表很短,那么订购和选择第一个(如前所述)可能是最简单的。

如果您有一个较长的列表并且排序开始变慢(这可能不太可能),您可以编写自己的扩展方法来执行此操作(我使用 MaxItem 因为我认为 Max 会与现有的 LINQ 方法发生冲突,但我懒得去了解)。

public static T MaxItem<T>(this IEnumerable<T> list, Func<T, int> selector) {
    var enumerator = list.GetEnumerator();

    if (!enumerator.MoveNext()) {
        // Return null/default on an empty list. Could choose to throw instead.
        return default(T);
    }

    T maxItem = enumerator.Current;
    int maxValue = selector(maxItem);

    while (enumerator.MoveNext()) {
        var item = enumerator.Current;
        var value = selector(item);

        if (value > maxValue) {
            maxValue = value;
            maxItem = item;
        }
    }

    return maxItem;
}

或者,如果您需要退回所有最大物品:

public static IEnumerable<T> MaxItems<T>(this IEnumerable<T> list, Func<T, int> selector) {
    var enumerator = list.GetEnumerator();

    if (!enumerator.MoveNext()) {
        return Enumerable.Empty<T>();
    }

    var maxItem = enumerator.Current;
    List<T> maxItems = new List<T>() { maxItem };
    int maxValue = selector(maxItem);

    while (enumerator.MoveNext()) {
        var item = enumerator.Current;
        var value = selector(item);

        if (value > maxValue) {
            maxValue = value;
            maxItems = new List<T>() { item };
        } else if (value == maxValue) {
            maxItems.Add(item);
        }
    }

    return maxItems;
}

If the list is short then ordering and selecting the first (as previously mentioned) is probably the easiest.

If you have a longer list and sorting it starts to get slow (which is probably unlikely), you could write your own extension method to do it (I used MaxItem because I think just Max would conflict with existing LINQ methods, but I'm too lazy to find out).

public static T MaxItem<T>(this IEnumerable<T> list, Func<T, int> selector) {
    var enumerator = list.GetEnumerator();

    if (!enumerator.MoveNext()) {
        // Return null/default on an empty list. Could choose to throw instead.
        return default(T);
    }

    T maxItem = enumerator.Current;
    int maxValue = selector(maxItem);

    while (enumerator.MoveNext()) {
        var item = enumerator.Current;
        var value = selector(item);

        if (value > maxValue) {
            maxValue = value;
            maxItem = item;
        }
    }

    return maxItem;
}

Or, if you need to return all the maximum items:

public static IEnumerable<T> MaxItems<T>(this IEnumerable<T> list, Func<T, int> selector) {
    var enumerator = list.GetEnumerator();

    if (!enumerator.MoveNext()) {
        return Enumerable.Empty<T>();
    }

    var maxItem = enumerator.Current;
    List<T> maxItems = new List<T>() { maxItem };
    int maxValue = selector(maxItem);

    while (enumerator.MoveNext()) {
        var item = enumerator.Current;
        var value = selector(item);

        if (value > maxValue) {
            maxValue = value;
            maxItems = new List<T>() { item };
        } else if (value == maxValue) {
            maxItems.Add(item);
        }
    }

    return maxItems;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文