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)))));