我使用
为什么结果取决于第二个字母,最后两行会得到不同的结果? 如果 o 是第一个,ö 是下一个,那么第4行是否也应该返回 -1 ? 有人能解释一下吗?
为了解释我在这里遇到的问题,我们来比较一些代码:
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):
Dart vadder
Dont sleep
Family
Friends
Ö3 Greatest Hits
Oasis
Ödipus
Österreich
Oxfort
Panda
Update
使用 ComparerB 得到的结果为(Ö 在列表结尾):
Dart vadder
Dont sleep
Family
Friends
Oasis
Oxfort
Panda
Update
Ö3 Greatest Hits
Ödipus
Österreich
但我需要的是这个(Ö 出现在 O 后):
Dart vadder
Dont sleep
Family
Friends
Oasis
Oxfort
Ö3 Greatest Hits
Ödipus
Österreich
Panda
Update
CultureInfo
,其中Ö
在O
之前排序。但是在德语中,根据微软和其他公司的实现,它们排序方式不同。您可以进行反向排序,但显然这也会以不同的方式对其他字符进行排序。 - Charlieface