如何对一个字符串列表进行排序?

4

我有一个人员列表 List<person>

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

他们的年龄是用 string 表示的,但实际上是属于 int 类型的,取值如"45", "70", "1" 等。如何把这个列表按从大到小的顺序排序?

调用 people.Sort(x => x.Age); 不能得到想要的结果。谢谢。


2
想要的结果是什么? - Jeroen Vannevel
2
就像我说的那样,从旧到新排序 :) - user3293835
2个回答

6
这应该可以正常工作(假设people是一个List<Person>):
people = people.OrderByDescending(x => int.Parse(x.Age)).ToList();

如果您不想创建一个新的List,您可以为您的类实现IComparable<T>接口:

public class Person : IComparable<Person>
{
    public string Age { get; set; }

    public int CompareTo(Person other)
    {
        return int.Parse(other.Age).CompareTo(int.Parse(this.Age));
    }
}

那么你只需要使用Sort方法:
people.Sort();

6
您可以将每个字符串转换为整数,然后按照从大到小的顺序排序:
var oldestToYoungest = persons.OrderByDescending(x => Int32.Parse(x.Age));

假设年龄是"7"、"22"和"105",那么这将给你所期望的结果:

105
22
7

如果您将它们作为字符串排序,就无法得到期望的结果,如您所发现的那样。您最终会得到一个按字母顺序排列的列表,例如:
"7"
"22"
"105"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接