Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据语言规则将标题列表按首字母分组?_C#_Linq - Fatal编程技术网

C# 如何根据语言规则将标题列表按首字母分组?

C# 如何根据语言规则将标题列表按首字母分组?,c#,linq,C#,Linq,我有一个游戏名称列表,我正试图显示。使用OrderBy() 一场香港电台的比赛 有史以来最精彩的比赛 Carl的游戏 D阿维德的游戏 Earnest的游戏 更好的游戏 那太好了,正是我想要的 但是,我如何以一种文化敏感的方式,将这个列表按第一个字母(粗体字母)进行分组呢?更具体地说,如何获取用于以这种方式对列表排序的实际字符串OrderBy() 我试着查看System.Globalization.SortKey.OriginalString,但它只是返回了给定的字符串 我知道我总是可以采取草

我有一个游戏名称列表,我正试图显示。使用
OrderBy()

  • 一场香港电台的比赛
  • 有史以来最精彩的比赛
  • Carl的游戏
  • D阿维德的游戏
  • Earnest的游戏
  • 更好的游戏
那太好了,正是我想要的

但是,我如何以一种文化敏感的方式,将这个列表按第一个字母(粗体字母)进行分组呢?更具体地说,如何获取用于以这种方式对列表排序的实际字符串
OrderBy()

我试着查看
System.Globalization.SortKey.OriginalString
,但它只是返回了给定的字符串

我知道我总是可以采取草率的方式,只从字符串的开头修剪“A”、“An”和“the”,但我希望.Net能够有一种方法来连接到它的文化敏感排序逻辑中,以获得更健壮的解决方案


Edit:看起来我搞错了,
GroupBy()
实际上并不是这样排序的。我把样品单弄乱了。因此,看起来我将不得不删掉“A”、“An”和“the”前缀。感谢@stuartd指出我的错误。

我不知道有什么已经实现的解决方案可以按要求对标题进行排序。由于您可以排除的单词并不多(我相信),您可以定义自己的排除列表,如

List<string> exclusions = new List<string>()
{
    "the", "an", "a",
};
其想法是将标题按空格分开,并将其连接在一起,而不包含被排除的单词。在那之后,一个简单的订单就完成了这项工作

  • A简单轨迹1
  • A简单Atrack2
如果您只需要在第一个未排除的单词之前忽略所有排除项,则可以使用
跳过
来改进查询

var result = titles.OrderBy(
    t => string.Join(" ", t.Split(' ')
        .SkipWhile(s => exclusions.Any(x => x.Equals(s, StringComparison.OrdinalIgnoreCase)))));
  • A简单A轨迹2
  • A简单轨迹1

您介意这样显示按标题排序的代码吗?我以前从未见过这种情况。@stuartd哇,我检查了我的示例代码,你完全正确
OrderBy()
不是这样排序的。这可能就是为什么我找不到任何关于它的文档。谢谢你的提醒。
var result = titles.OrderBy(
    t => string.Join(" ", t.Split(' ')
        .SkipWhile(s => exclusions.Any(x => x.Equals(s, StringComparison.OrdinalIgnoreCase)))));