如何排序字符串列表?

时间:2014-03-01 02:15:14

标签: c# linq sorting

我有一份人员名单List<person>

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

他们的年龄在string,但实际上是int类型,其值为"45", "70", "1" etc.。如何从旧到年轻的列表排序?

调用people.Sort(x => x.Age);并未提供所需的结果。感谢。

2 个答案:

答案 0 :(得分:6)

这应该有用(假设peopleList<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();

答案 1 :(得分:6)

您可以将每个字符串转换为int,然后对它们进行排序,从最大到最小:

var oldestToYoungest = persons.OrderByDescending(x => Int32.Parse(x.Age));

那会给你想要的结果(假设年龄为“7”,“22”和“105”):

105
22
7

如果您将它们排序为字符串,则无法获得所需的结果,如您所发现的那样。您最终会按字母顺序排列一个列表,例如:

"7"
"22"
"105"