IOS數組按中文關鍵字以字母序排序

來源:互聯網
上載者:User

    IOS項目中會用到對通訊錄的連絡人或是會員按姓名為關鍵字排序,因為NSArray並不直接支援對漢字的排序,這就要通過將漢字轉換成拼音完成按A~Z的排序,這看起來是個頭疼的問題,因為牽扯到漢字轉為拼音,kmyhy給出一個較易實現的方法,擷取漢字的首字的首字母,如將“王”變成“W”,完整文章(傳送門)。

    其中他通過pinyinFirstLetter函數擷取中文拼音,函數原理是:“pinyinFirstLetter基於這麼一個簡單的原理:我們知道,在Objective C語言中,字串是以unicode進行編碼的。在unicode字元集中,漢字的編碼範圍為4E00 到 9FA5 之間(即從第19968開始的20902個字元是中文簡體字元)。我們把這些字元的拼音首字母按照順序都存放在一個char數組中。當我們尋找一個漢字的拼音首字母時,只需把這個漢字的unicode碼(即char強制轉換為int)減去19968,然後用這個數字作為索引去找char數組中存放的字母即可。”函數代碼我也貼了過來。

char pinyinFirstLetter(unsignedshort hanzi){  int index = hanzi - HANZI_START;  if (index >= 0&& index <= HANZI_COUNT) {  return firstLetterArray[index]; } else {  return hanzi; }}


     這個方法真是用很原理的東西,解決一個巧妙問題,但也存在一個問題:不支援漢字(首字)的第二個字母的排序,據說映射的char數組會很大。這裡我給出我的方法,先在CocoaTouch架構上看看有什麼能用到的,在NSString有一個函數localizedCompare:,它的功能是通過自身與給定字串的比較,返回一個本地化的比較結果,也就是說這個函數是支援漢字比較的。
    進一步localizedCompare:只是字串與字串的比較,我們要讓NSArray數組通過按關鍵字為漢字字串排序,我們繼續在NSArray的SDK上下功夫,我們發現除了sortdArrayUsingDescriptors:通過NSSortDescriptor排序;還有sotedArrayUsingFunction:context:,這個函數支援我們自訂一個函數制定比較規則,返回比較結果,這樣問題一下便解決了。我先把代碼貼出來。

NSInteger nickNameSort(id user1, id user2, void *context){    User *u1,*u2;  //類型轉換    u1 = (User*)user1;    u2 = (User*)user2;    return  [u1.nickName localizedCompare:u2.nickName];}


     在需要比較地方,調用比較函數

 sortArr = [arr sortedArrayUsingFunction:nickNameSort context:NULL]; 

   需要的代碼很少吧,這樣做會有幾方面的好處:1 支援多個漢字按字母序排序(若第一個字的第一個字母相同,則按第一個字的第二個字母比較,若第一個字的字母完全相同,按第二個字的首字母繼續排序)。 2 原本可能需要儲存漢字拼音的地方,現在不需要了。 3 可以通過對nickNameSortde進一步定製,完成更複雜的比較,比如先比較會員狀態,在按姓名字母序完成比較。4 整體結構簡單 使用的都是CocaTouch架構下的的方法。
再感歎一句,CocaTouch你真厲害!!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.