国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

中文通訊錄排序的一種實現方法

2019-11-09 16:35:37
字體:
來源:轉載
供稿:網友

在我們通訊錄中,聯系人都是按一定的順序(字典順序)從上到下排列的。那么對于保存為中文的聯系人,它的排序是怎樣實現的呢?

現行比較好理解,容易想到又通用的方法是先將中文轉換為拼音形式,再根據拼音各字母的ACSII碼大小比較從而實現排序目的。

1、申請兩個數組A、B,A中保存的是原始聯系人數據

2、將數組A中的漢字轉換為拼音: iOS在CoreFoundation中提供了CFStringTransform函數,可將漢字轉換為拼音,它的定義如下:

Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse);

參數說明: string參數是要轉換的string,比如要轉換的中文,同時它是mutable的,因此也直接作為最終轉換后的字符串。 range是要轉換的范圍,同時輸出轉換后改變的范圍,如果為NULL,視為全部轉換。 transform可以指定要進行什么樣的轉換,這里可以指定多種語言的拼寫轉換。 reverse指定該轉換是否必須是可逆向轉換的。

如果轉換成功就返回true,否則返回false。

如果要進行漢字到拼音的轉換,我們只需要將transform設定為 kCFStringTransformMandarinLatin或者kCFStringTransformToLatin (kCFStringTransformToLatin也可適用于非漢字字符串)

實例如下: CFMutableStringRef string = CFStringCreateMutableCopy(NULL, 0, CFSTR(“中國”)); CFStringTransform(string, NULL, kCFStringTransformMandarinLatin, NO); NSLog(@”%@”, string); 這段代碼將輸出: 2013-11-22 14:41:14.644 Test[2436:907] zhōng guó

可以看出,CFStringTransform正確的輸出了“中國”的拼音,而且還帶上了音標。有時候我們不需要音標怎么辦?還好CFStringTransform同時提供了將音標字母轉換為普通字母的方法kCFStringTransformStripDiacritics。我們在上面的代碼基礎上再加上這個:

CFStringTransform(string, NULL, kCFStringTransformStripDiacritics, NO); NSLog(@”%@”, string);

那么最終將輸出: 2013-11-22 14:47:00.380 Test[2470:907] zhong guo

3、去掉拼音中的空白字符

4、將數組A中聯系人的拼音形式存儲到數組B中,此時A與B中索引相同的元素存儲的是同一個人。在數組B中的每個元素后面都加上該元素在數組中的索引號。

5、對數組B中的所有元素進行排序(按ACSII碼)。

6、顯示數據時,從數組B中第一個元素開始,依次取出元素末尾的索引號,據此索引號去數組A中提取相應位置的元素將其顯示出來,得到的顯示結果就是排好序的數據。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武强县| 曲靖市| 贺兰县| 临安市| 同德县| 景德镇市| 宁海县| 灵武市| 红河县| 永宁县| 双牌县| 宜都市| 绵阳市| 呼伦贝尔市| 满城县| 长治县| 东阳市| 三门峡市| 察哈| 紫金县| 珲春市| 锡林浩特市| 福清市| 安平县| 潍坊市| 特克斯县| 牟定县| 察隅县| 淮南市| 同仁县| 故城县| 营口市| 西吉县| 历史| 永城市| 长垣县| 乐平市| 邹平县| 上虞市| 蓝田县| 乐清市|