按照汉语拼音排序,很多人都想在《拼音词典》的相关库中实现。 在github上搜索拼音,库确实很多,但实现成本有点高。 搜索拼音排序还在。 我简单地看了一下,实现方法有很多种。
今天分享拼音顺序的小技巧。 虽然与语言无关,但用PHP实现最简单,所以用PHP演示。
$province_arr=[ '山东'、'山西'、'安徽'、'北京'、'福建'、'甘肃'、'广东'、'贵州' ];
usort($province_arr,function ) $a,$b ) {
$a=iconv('utf-8 ',' GBK//IGNORE ',$a );
$b=iconv('utf-8 ',' GBK//IGNORE ',$b );
返回$ a $ b? 1:-1;
);
print_r($province_arr;
/*结果如下
阿拉伊
(
[0]=安徽
[1]=北京
[2]=福建
[3]=甘肃
[4]=广东
[5]=贵州
[6]=山东
[7]=山西
)
*/
如果不计算闭包函数,就可以通过一行代码实现“拼音排序汉字”功能。 当然,此代码具有数组中每行的数据运行两次iconv () )函数的缺点。 这个可以优化。 另一个是扩展性不足,遇到以英语开头的字符串时需要特别处理。 除此之外还有相当用力的方法。 我来说明他的排名原理。
GBK代码是GB2312代码的扩展,因此与GB2312-80标准完全兼容。 GBK编码仍然采用2字节编码方案,其编码范围为8140-FEFE,除xx7F编码比特之外,总共23940个编码比特。 收录汉字和图形符号21886个,其中汉字(包括部首和构件) 21003个,图形符号883个。 GBK代码支持国际标准ISO/IEC10646-1和国家标准GB13000-1的所有中日韩汉字,并包含BIG5代码的所有汉字。 GBK编码方案于1995年12月15日正式发布,该版本的GBK规范为1.0版。 更新介绍
上面的段落是GBK代码的概要,但是认真看一下GBK代码的介绍就会发现很有趣。
GBK码汉字区域如下。
a. GB 2312汉字区。 即GBK/2: B0A1-F7FE。 收录GB 2312个汉字6763个,按原来的顺序排列。
b .扩充b. GB 13000.1汉字区。 包括以下内容:
GBK/3: 8140-A0FE。 GB 13000.1中收录的CJK汉字为6080个字符。
GBK/4: AA40-FEA0。 收录了CJK汉字和追加汉字8160个。 CJK汉字在前面,按UCS码大小排列; 在补充的汉字(包括部首和部件)之后,按《康熙字典》的页码/字位排列。
由于GBK码的两次扩展是基于拼音的代码排序,因此发现整个GBK汉字区的中文符号都带有拼音权重。 所以这个权重可以很容易地实现“拼音排序汉字”的功能。
此外,GBK代码可以轻松地在Java、JS和Golang中实现拼音排序功能,而与编程语言无关。
更多相关文章来自我的博客-原文链接:中文拼音顺序小技巧
疑问加站长微信联系(本论文作者以外) ) ) ) ) )。