c# - 在 LINQ 中使用 OrderBy 首先是西里尔字母,然后是拉丁字母

标签 c# .net linq

var listExample = new List<string>(){ "banana", "apple", "lemon", "orange", 
"cherry", "pear", "яблоко", "лимон", "груша", "банан", "апельсин", "вишня" };
listExample = listExample.OrderBy(x => x).ToList();

结果是

{ "apple", "banana", "cherry", "lemon", "orange", "pear", "апельсин", "банан", "вишня", "груша", "лимон", "яблоко" }

但是像这样需要先用俄语再用英语点菜

{ "апельсин", "банан", "вишня", "груша", "лимон", "яблоко", "apple", "banana", "cherry", "lemon", "orange", "pear" }

如何使用 OrderBy 获得该结果?

最佳答案

您可以使用 Order 检查作品是否为 latin

下面的代码返回所需的输出,它检查单词是否为 IsCyrillic。

    var listExample = new List<string>(){ "banana", "apple", "lemon", "orange",  "cherry", 
                           "pear", "яблоко", "лимон", "груша", "банан", "апельсин", "вишня" };

    var result = listExample.OrderBy(x => x)
                    .Select(x => new {val = x, isCyrillic = Regex.IsMatch(x, @"\p{IsCyrillic}")})
                    .OrderBy(x => !x.isCyrillic).Select(x => x.val);

    foreach (var str in result)
    {
        Console.WriteLine(str);
    }

检查这个 fiddle 的完整代码 - https://dotnetfiddle.net/9o4FJt

上面程序的输出是

апельсин банан вишня груша лимон яблоко apple banana cherry lemon orange pear

关于c# - 在 LINQ 中使用 OrderBy 首先是西里尔字母,然后是拉丁字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50941895/

相关文章:

c# - 如何重新查询单个 RoutedCommand 的 'CanExecute'?

c# - 使用 LINQ 删除列表中的重复内容?

c# - 如何在 C# 中执行 shell 脚本?

c# - DbContext 仅在远程服务器上超时

c# - 在 C# 中编写 [0..100] 的最佳方法是什么?

c# - Console.ReadLine()。ToString()生成错误

c# - 如果我快速连续运行多个 Azure 搜索索引器,是否有办法访问 Azure SDK 中的等待索引器队列?

c# - Scaffold-DbContext SQL View ? ASP 网络核心 3.1

c# - 使用 C#(Windows 应用程序)创建 HTML 文档并在其中放置表格

c# - MVP 中的接口(interface)和类