由于多音字原因,在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;