在网上找了一段汉字按首字母排序的代码,结果是正确的,但是不是太明白。
所以想请教高手解释下这段代码。
string[] arrHZ = { "奥", "波", "车", "当", "额", "发", "急", "哈", "经", "卡", "辣", "妈", "拿", "哦", "爬", "全", "让", "撒", "它", "哇", "下", "压", "砸" }; int area = 0; int pos = 0; int yiWei = 0; int code = 0; int py = 0; int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 }; for (int i = 0; i < arrHZ.Length; i++) { arrByte = Encoding.Default.GetBytes(arrHZ[i]); area = (short)arrByte[0]; pos = (short)arrByte[1]; yiWei = area << 8; code = yiWei + pos; for (int j = 0; j < 26; j++) { int max = 55290; if (j != 25) max = areacode[j + 1]; if (areacode[j] <= code && code < max) { py = j + 200; Console.WriteLine("area:" + area + ",pos:" + pos + ",yiWei:" + yiWei + ",code:" + code + ",py:" + py); } } }
//源代码:
public static int GetSpellByOneChar(char onechar)
{
string text = onechar.ToString();
byte[] arrCN = Encoding.Default.GetBytes(text);
if (arrCN.Length > 1)//分析汉字.
{
int area = (short)arrCN[0];
int pos = (short)arrCN[1];
int code = (area << 8) + pos;
int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };
for (int i = 0; i < 26; i++)
{
int max = 55290;
if (i != 25) max = areacode[i + 1];
if (areacode[i] <= code && code < max)
{
return i + 200;
}
}
return 0;//其他字符
}
else
{
//将小写字母和大写字母归为一类.
if (arrCN[0] > 94 && arrCN[0] < 123)
{
return arrCN[0] - 32;
}
return arrCN[0];
}
}
程序中areacode,是中文啊、芭、擦等等26个字母开头的汉字的编码十进制表示。然后把需要排序的汉字在程序中也转换为编码的十进制表示。然后和上面的26个的比较,给了一个200到226的数字,然后依据这个数字排序。
汉字编码中只有一部分常用的在gb2312中按拼音排的,有些不是,对于不是的这一部分,这个函数就没用了。
e !
多谢指导!
这东西一般都是字典啊。
什么意思?都是字典?
@荆棘人: 而且你那不是有代码么?字典。。。
@顾晓北: 说的太笼统,不明白你说的啥意思。请详细说一说,谢谢。
@荆棘人: 就是哪个字对应哪个字母是你自己定好的。。。
@顾晓北: 不是的,这个是本质是取名字的,所有字的首字母,进行排序。主要有两点:
1)如果根据字的对应的一个“”编码“”解析成与26个英文字母属于的对应关系,然后用来排序,这个原理是什么,我想知道!!
2)但是因为姓氏中有的字是多音字需要纠正,所以要纠正排序;这一条我已经知道怎么弄了。
@荆棘人: 排序默认你根据汉字排序,就是根据编码排序,而不是什么26个字母对应关系,只是因为汉字编码的时候正好是根据字母那么排了而已,不过这样有一个点要说一下:那就是,多音字只排一次。。。
@顾晓北: 谢谢指导!