国产探花免费观看_亚洲丰满少妇自慰呻吟_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中提取相應位置的元素將其顯示出來,得到的顯示結果就是排好序的數據。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保康县| 台南县| 喜德县| 岱山县| 郁南县| 清新县| 穆棱市| 库尔勒市| 威宁| 兴义市| 托里县| 晋宁县| 牟定县| 龙山县| 招远市| 武夷山市| 安溪县| 高平市| 和静县| 慈溪市| 海晏县| 定远县| 罗源县| 扶风县| 藁城市| 夏邑县| 镶黄旗| 平昌县| 贵定县| 大厂| 屯门区| 且末县| 渭源县| 镇安县| 黔西县| 香港 | 桐梓县| 广平县| 桑日县| 景宁| 古田县|