使用CFStringTransform將漢字轉成拼音,非常耗時!,cfstringtransform
最近做一個通訊錄項目,需要將連絡人讀入app記憶體(通訊錄有400人左右),並依照首字母排序。這裡使用了在將漢字轉化成拼音的時候,iOS系統內建介面:
注意self.latinString需要是一個mutable的string
//1.將非字串轉化成拉丁字母 CFStringTransform((__bridge CFMutableStringRef)self.latinString, NULL, kCFStringTransformMandarinLatin, NO); CFStringTransform((__bridge CFMutableStringRef)self.latinString, NULL, kCFStringTransformStripDiacritics, NO);
但是,app啟動時候,非常的慢。因為在載入連絡人,並且將漢字轉化成pinyin。下面看看對比結果:
如果直接轉化:
>> 2014-10-17 16:14:03.988 [contact_log]ContactList.m:87 -[ContactList loadContactFromAB] :_addressBookEngine loadAdressBook10.022583
載入一遍用了10秒。
我的做法是:既然通訊錄裡的人不會經常改變,可以將所有人的名字——pinyinDic緩衝起來(字典),這樣讀取的時候,從字典裡擷取拼音,應該會快很多!結果驗證了我的猜想:
//1.先從緩衝中獲得latin,然後再判斷是否存在,再將非字串轉化成拉丁字母 NSString* latin = [pinyinDic objectForKey:self.fullName]; if (latin) { self.latinString = latin; } else { CFStringTransform((__bridge CFMutableStringRef)self.latinString, NULL, kCFStringTransformMandarinLatin, NO); CFStringTransform((__bridge CFMutableStringRef)self.latinString, NULL, kCFStringTransformStripDiacritics, NO); [pinyinDic setObject:self.latinString forKey:self.fullName]; }運行結果是:
>> 2014-10-17 16:18:47.992 [contact_log]ContactList.m:87 -[ContactList loadContactFromAB] :_addressBookEngine loadAdressBook0.641795
載入一次不到1秒了。
注意:這個時間是真機聯調的時候列印的時候。
EXCEL漢字轉拼音怎轉
建議你複製到WORD中,WORD中專門有一個按鈕可以直接轉化為拼音。轉化完後,再複製到EXCEL中即可
excel怎把漢字轉成拼音
hi.baidu.com/...d.html