【发布时间】:2013-11-04 05:06:45
【问题描述】:
为什么下面的代码不能对我的列表进行排序?
List<string> lst = new List<string>() { "bac", "abc", "cab" };
lst.OrderBy(p => p.Substring(0));
【问题讨论】:
为什么下面的代码不能对我的列表进行排序?
List<string> lst = new List<string>() { "bac", "abc", "cab" };
lst.OrderBy(p => p.Substring(0));
【问题讨论】:
因为 OrderBy 返回 IOrderedEnumerable 你应该这样做:
lst = lst.OrderBy(p => p.Substring(0)).ToList();
您还可以执行以下操作:
lst.Sort();
【讨论】:
List<T>.Sort 是一种不稳定的排序,而 OrderBy 是稳定的。当然,在这种情况下,排序是仅按首字母排序,而使用不带任何参数的list.Sort 将按整个字符串排序。
.Substring(0) 返回整个字符串,我相信...对于第一个字符,需要 .Substring(0,1) 或 [0]...
lst = lst.OrderByDescending(p => p.Substring(0)[0] == searchValue[0]).ToList();您将 LINQ 操作与更改其应用的变量的方法(即对象的实例方法)混淆了。
LINQ 操作(即 .OrderBy)返回一个查询。它不对您的对象(即lst)执行操作。
您需要将该查询的 result 分配回您的变量:
lst = lst.OrderBy(p => p).ToList();
在 LINQ 术语中。
【讨论】:
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);
}
【讨论】: