gpt4 book ai didi

C# 比较字符串与变音奇怪的结果

转载 作者:行者123 更新时间:2023-12-04 00:51:04 25 4
gpt4 key购买 nike

我使用 string.Compare(strA, strB, true, CultureInfo.CurrentCulture); 并且不要理解结果。CurrentCulture 是“de-DE”。

string.Compare( "o", "ö", true, CultureInfo.CurrentCulture) // result: -1 
string.Compare( "d", "f", true, CultureInfo.CurrentCulture) // result: -1
string.Compare( "dx", "fa", true, CultureInfo.CurrentCulture) // result: -1
string.Compare( "ox", "öa", true, CultureInfo.CurrentCulture) // result: 1
string.Compare( "oa", "öx", true, CultureInfo.CurrentCulture) // result: -1

为什么结果取决于第二个字母在最后两行得到不同的结果?如果 o 是第一个,ö 是下一个,第 4 行不应该也返回 -1 吗?谁能解释一下?

解释为什么我对此有问题比较一些代码:

class Program
{
public class ComparerB : IComparer<string>
{
public int Compare(string x, string y)
{
return string.CompareOrdinal(x, y);
}
}

public class ComparerA : IComparer<string>
{
public int Compare(string x, string y)
{
return string.Compare(x, y, true, CultureInfo.CurrentCulture);
}
}

static void Main(string[] args)
{
List<string> list = new List<string>();
list.Add("Update");
list.Add("Ö3 Greatest Hits");
list.Add("Dont sleep");
list.Add("Friends");
list.Add("Dart vadder");
list.Add("Family");
list.Add("Oxfort");
list.Add("Ödipus");
list.Add("Oasis");
list.Add("Österreich");
list.Add("Panda");

list.Sort(new ComparerA());
foreach (var item in list)
{
Console.WriteLine(item);
}
Console.WriteLine();
list.Sort(new ComparerB());
foreach (var item in list)
{
Console.WriteLine(item);
}

Console.ReadLine();
}
}

使用 ComparerA 结果是(混合 Ö 和 O):

飞镖
别睡了
家庭
friend
Ö3 精选集
绿洲
俄狄浦斯
奥地利
牛津大学
Pandas
更新

使用 ComparerB 结果是(Ö 在列表末尾):

飞镖
别睡了
家庭
friend
绿洲
牛津大学
Pandas
更新
Ö3 精选集
俄狄浦斯
奥地利国家

但我需要的是这个(O 之后的Ö):

飞镖
别睡了
家庭
friend
绿洲
牛津大学
Ö3 精选集
俄狄浦斯
奥地利
Pandas
更新

最佳答案

在你的比较器A中,你有代码

return string.Compare(x, y, true, CultureInfo.CurrentCulture);

这意味着您正在使用我认为是德语的 CurrentCulture,因此我在互联网上注意到的德语字母顺序如下

A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、T、 U、V、W、X、Y、Z、Ä、Ö、Ü、ß

所以,排序会相应地进行,所以你目前得到的是正确的我相信,但如果你仍然需要按照你的意愿去做并且你愿意使用另一个 strong> CultureInfo 其中 O, Ö 的顺序就像土耳其语 "tr-TR" 一样紧挨着,那么代码应该是这样的:

return string.Compare(x, y, true, new CultureInfo("tr-TR"));

结果如下:

Dart vadder
Dont sleep
Family
Friends
Oasis
Oxfort
Ö3 Greatest Hits
Ödipus
Österreich
Panda
Update

另一种选择是开发您的自定义排序算法和函数,考虑您喜欢的任何字符序列。

关于C# 比较字符串与变音奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66623010/

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