gpt4 book ai didi

c# - 如何使用语言规则按首字母对标题列表进行分组?

转载 作者:行者123 更新时间:2023-11-30 16:42:57 24 4
gpt4 key购买 nike

我有一个要显示的游戏名称列表。使用 OrderBy() 根据当前区域性的标题规则对列表进行排序,因此对于 en-US 我得到如下列表:

  • 亚瑟的游戏
  • 有史以来最好的游戏
  • 卡尔的游戏
  • David 的游戏
  • E阿内斯特的游戏
  • 一个甚至更好的游戏

太棒了,正是我想要的。

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

我尝试查看 System.Globalization.SortKey.OriginalString,但它只返回了给定的相同字符串。

我知道我总是可以采取草率的方式,从字符串的开头修剪“A”、“An”和“The”,但我希望 .Net 有一种方法可以 Hook 到它的文化敏感排序逻辑以获得更强大的解决方案。

编辑:看来我弄错了,GroupBy() 实际上并不是那样排序的。我搞砸了我的 sample list 。所以看起来我必须去掉“A”、“An”和“The”前缀。感谢@stuartd 指出我的错误。

最佳答案

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

List<string> exclusions = new List<string>()
{
"the", "an", "a",
};

基于此排除项,您可以使用忽略您定义的排除项的简单查询来订购您的标题(在此实现中不区分大小写):

var orderedTitles = titles.OrderBy(
t => string.Join(" ", t.Split(' ')
.Where(s => !exclusions.Any(x => x.Equals(s, StringComparison.OrdinalIgnoreCase)))));

这个想法是用空格分割标题,并在没有排除的单词的情况下将它们连接在一起。之后,一个简单的 order by 就可以完成这项工作。

  • 一个简单的track1
  • 一个简单一个track2

如果您只需要忽略第一个非排除词之前的所有排除项,则可以使用 Skip 改进查询。

var result = titles.OrderBy(
t => string.Join(" ", t.Split(' ')
.SkipWhile(s => exclusions.Any(x => x.Equals(s, StringComparison.OrdinalIgnoreCase)))));
  • 一个简单的轨道2
  • 一个简单的track1

关于c# - 如何使用语言规则按首字母对标题列表进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45786852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com