c# - 通过将以特定字母开头的单词放在开头来对字符串列表进行排序

标签 c# linq list

假设我有以下列表:

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/

相关文章:

c# - 将 LambdaExpression 转换为带装箱返回值的类型化 Expression<Func<T, object>>

c# - 如何将复杂对象绑定(bind)到 DataGridView?

c# - 如何将匿名类型的 List 转换为 List<T>?

c# - Linq to entities 将日期时间与毫秒精度进行比较

c - 链接列表递归函数,从列表中删除奇数值。 (C)

c# - 给定一个 ContainerBuilder,我可以注册一个缺失的依赖处理程序吗?

c# - ASP.NET C# MySQL 查询执行失败时重试

LINQ 从列表中获取最大值

c# - if 语句的多个值

C++ - 推回队列列表