Dotnet
由于多音字原因,在C#中进行字符串排序时,有些字不能完全按照正确的读音进行排序,
例如重庆,读chong或者zhong,排序时会认为是zhong庆
又例如莞,读guan或者wan,排序时会认为是wǎn,莞尔
所以需要做特殊处理,下面的方法是将多音字改为单音字,实现排序的目的
using System.Collections.Generic;
namespace Cscoder.Cn.Util
{
public class ChineseFirstCharCompare:IComparer<string>
{
string FirstCharAdapter(string value)
{
if (value.StartsWith("重庆"))
{
return value.Replace("重庆", "虫庆");
}
else if (value.StartsWith('莞'))
{
return value.Replace("莞", "管");
}
else
{
return value;
}
}
public int Compare(string x, string y)
{
x = FirstCharAdapter(x);
y = FirstCharAdapter(y);
return x.CompareTo(y);
}
}
}
部署的注意事项
这里用到了dotnet的CompareTo,这里会受到系统语言的影响,一般出现在使用docker部署的时候
如果要指定某种语言,可以在 startup.cs 的Configure中添加如下代码
var cultureInfo = new CultureInfo("zh-cn");
//var cultureInfo = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;