使用OrderBy对列表进行排序

18

为什么下面的代码不能对我的列表进行排序?

List<string> lst = new List<string>() { "bac", "abc", "cab" };
lst.OrderBy(p => p.Substring(0));
3个回答

28

由于 OrderBy 返回 IOrderedEnumerable,因此您应该进行以下操作:

lst = lst.OrderBy(p => p.Substring(0)).ToList();

你还可以采取以下方法:

lst.Sort();

2
请注意,List<T>.Sort 是一种不稳定的排序方法,而 OrderBy 则是稳定的。当然,在这种情况下,排序仅按照第一个字母进行,而使用 list.Sort 而没有任何参数将按整个字符串进行排序。 - Jon Skeet
Jon,.Substring(0) 返回整个字符串,我相信... 对于第一个字符,需要使用.Substring(0,1)[0]... - Stephen Chung
如何按照特定搜索关键字字母顺序将list<string>排序为第一位?我尝试了以下代码但不起作用:lst = lst.OrderByDescending(p => p.Substring(0)[0] == searchValue[0]).ToList(); - Pranesh Janarthanan

22
你正在混淆LINQ操作和改变被应用对象的方法(即对象的实例方法)。
LINQ操作(如.OrderBy)返回一个“查询”,它不会在你的对象(如lst)上执行操作。
你需要将该查询的结果分配回你的变量中:
lst = lst.OrderBy(p => p).ToList();

在 LINQ 的术语中。


1
string[] words = { "bac", "abc", "cab" };

var sortedWords = from w in words
                  orderby w
                  select w;

Console.WriteLine("The sorted list of words:");

foreach (var w in sortedWords)
{
    Console.WriteLine(w);
}

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