pinyin中文首字母排序

2021-08-27 06:04:28 字數 1012 閱讀 8325

因專案需要對通訊錄中的聯絡人進行排序,需要對中文字元進行拼音轉換。其實這個轉換並沒有想象中的那麼難(因為我們只是把中文轉為拼音首字母而已,比如「王」轉換為字母w就可以了,而不需要轉換為完整的拼音wang)。對此,我們找到了乙個簡便的解決辦法:乙個老外(**中簽名的作者叫george)用c語言寫了乙個pinyinfirstletter函式用於獲取中文拼音首字母。

這個函式主要基於乙個巨大的c語言char陣列,把unicode字符集中所有中文的拼音首字母都對映進去了。

pinyinfirstletter基於這麼乙個簡單的原理:我們知道,在objective c語言中,字串是以unicode進行編碼的。在unicode字符集中,漢字的編碼範圍為4e00 到 9fa5 之間(即從第19968開始的20902個字元是中文簡體字符)。我們把這些字元的拼音首字母按照順序都存放在乙個char陣列中。當我們查詢乙個漢字的拼音首字母時,只需把這個漢字的unicode碼(即char強制轉換為int)減去19968,然後用這個數字作為索引去找char陣列中存放的字母即可。

就這樣,有這個char陣列為基礎,一切都變得非常簡單:

char

pinyinfirstletter(

unsigned

short

hanzi)

else }

至於排序,我們可以把要排序的中文(為簡便起見,我們假設這些要排序的中文都只有乙個字)放到nsarray中,然後利用nsarray的sortedarrayusingcomparator:方法進行排序即可。sortedarrayusingcomparator:方法是nsarray內部元素的比較方法。你只需要為這個方法提供乙個塊作為引數即可。然後在這個塊中,對兩個元素的大小進行比較,並返回乙個nscomparisonresult(nscomparisonresult列舉用於表示比較的結果:等於、小於、大於):

nsarray

*sortedarray=[marray 

sortedarrayusingcomparator

:^(id

a, id

b) ];

pinyin中文首字母排序

pinyin中文首字母排序 子木瀟雨 因 專案需要對通訊錄中的聯絡人進行排序,需要對中文字元進行拼音轉換。其實這個轉換並沒有想象中的那麼難 因為我們只是把中文轉為拼音首字母而已,比如 王 轉換為字母w就可以了,而不需要轉換為完整的拼音wang 對此,我們找到了乙個簡便的解決辦法 乙個老外 中簽名的作...

中文首字母 排序

因專案需要對通訊錄中的聯絡人進行排序,需要對中文字元進行拼音轉換。其實這個轉換並沒有想象中的那麼難 因為我們只是把中文轉為拼音首字母而已,比如 王 轉換為字母w就可以了,而不需要轉換為完整的拼音wang 對此,我們找到了乙個簡便的解決辦法 乙個老外 中簽名的作者叫george 用c語言寫了乙個pin...

Mysql 按中文首字母排序

在開發中,總會遇到各種 問題,排序的時候要按照中文的首字母排序,這裡就需要我們根據字元的編碼集將漢字排序。參考 在mysql資料庫中,存在很多種字符集儲存方式,比如utf8 latin1等,所以對排序也要根據不同字符集處理。1 如果資料庫表字段的字元編碼是latin1 swedish ci sele...