按拼音排序的小技巧

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

說到按中文拼音排序,很多人就想到了通過『拼音字典』的相關庫來實現。隨便在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);    return $a>$b?1:-1;});print_r($province_arr);/**結果如下Array(    [0] => 安徽    [1] => 北京    [2] => 福建    [3] => 甘肅    [4] => 廣東    [5] => 貴州    [6] => 山東    [7] => 山西)**/

不算閉包函數的話一行代碼就實現了『將漢字用拼音排序』的功能,當然這段代碼有一點缺陷就是數組中的每一行資料都執行了兩次iconv() 函數,這是可以最佳化的。另一點就是擴充性不足,遇到英文開頭的字串時需要做特殊處理。除此之外相當給力的一種方法,下面說說他排序的原理。

GBK編碼,是對GB2312編碼的擴充,因此完全相容GB2312-80標準。GBK編碼依然採用雙位元組編碼方案,其編碼範圍: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. GB 13000.1 擴充漢字區。包括:

  1. GBK/3: 8140-A0FE。收錄 GB 13000.1 中的 CJK 漢字 6080 個。
  1. GBK/4: AA40-FEA0。收錄 CJK 漢字和增補的漢字 8160 個。CJK 漢字在前,按 UCS 代碼大小排列;增補的漢字(包括部首和構件)在後,按《康熙字典》的頁碼/字位排列

我們發現GBK編碼的兩次擴充都是基於拼音做的編碼排序,所以整個GBK漢字區的中文符號都內建拼音權重。所以通過這個權重我們能輕鬆的實現『將漢字用拼音排序』功能。

另外GBK編碼與程式設計語言無關,我們通過Java,JS,Golang都能很輕鬆的實現拼音排序功能。

更多相關文章請移步我的部落格-原文連結:按中文拼音排序的小技巧

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.