假设我有以下列表:
IList<string> list = new List<string>();
list.Add("Mouse");
list.Add("Dinner");
list.Add("House");
list.Add("Out");
list.Add("Phone");
list.Add("Hat");
list.Add("Ounce");
我将如何使用 LINQ 选择包含“ou”的单词并对选择进行排序,以便在开头列出以“ou”开头的单词,然后列出包含但不以“ou”开头的单词。我要创建的列表是:
Ounce
Out
House
Mouse
我想出了以下方法,但它不起作用:
list.Where(x => x.Contains("ou"))
.OrderBy(x => x.StartsWith("ou"))
.Select(x => x);
最佳答案
您将获得区分大小写的比较,并且您还需要 OrderByDescending()
。 ToLowerInvariant()
是实现大小写不敏感的一种快速但肮脏的方法:
var result = list.Where(x => x.ToLowerInvariant().Contains("ou"))
.OrderByDescending(x => x.ToLowerInvariant().StartsWith("ou"))
.Select(x => x);
实例:http://rextester.com/GUR97180
This previous answer显示了进行不区分大小写比较的正确方法(即,不要使用我上面的示例,这很糟糕)
关于c# - 通过将以特定字母开头的单词放在开头来对字符串列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10500413/