0
我有NSArray包含NSDictionaries。我需要將它轉換爲 CFMutableArray,其中包含具有char *鍵和值的CFMutableDictionary類型項目。使用CFEqual與CFArray和CFDictionary
- (CFArrayRef)cStringDataSet {
CFArrayCallBacks cfTypeCallBacks = {0, NULL, NULL, NULL, CFEqual};
CFMutableArrayRef cStrDataSet = CFArrayCreateMutable(NULL, 0, &cfTypeCallBacks);
CFDictionaryKeyCallBacks charKeyCallBacks = {0, NULL, NULL, NULL, charEqual, charHash};
CFDictionaryValueCallBacks charValueCallBacks = {0, NULL, NULL, NULL, charEqual};
for (NSDictionary *dict in dataSet) {
CFMutableDictionaryRef cStrDict = CFDictionaryCreateMutable(NULL, 0, &charKeyCallBacks, &charValueCallBacks);
for (NSString *key in [dict allKeys]) {
const char *cStrKey = [key UTF8String];
const char *cStrValue = [[[dict objectForKey:key] description] UTF8String];
CFDictionaryAddValue(cStrDict, cStrKey, cStrValue);
}
CFArrayAppendValue(cStrDataSet, cStrDict);
}
return cStrDataSet;
}
charEqual和charHash定義如下:
Boolean charEqual(const void *ptr1, const void *ptr2) {
char *char1 = (char*)ptr1;
char *char2 = (char*)ptr2;
if (strlen(char1) != strlen(char2)) {
return false;
}
return !strncmp(char1, char2, strlen(char1));
}
CFHashCode charHash(const void *ptr) {
return (CFHashCode)((int)ptr);
}
現在我想比較使用CFEqual 2個CFArrayRefs,但功能charEqual,不會被調用CFEqual始終返回 「假」。
爲什麼你這樣做`if(strlen(char1)!= strlen(char2))`?我想,你想比較指針指向的值而不是指針長度。如果這是你想要的,`if`語句永遠不會被執行! – Mahesh 2011-02-16 12:12:56
AFAIK,strlen返回以null結束的字符串的長度,所以它會比較char1和char2指向的值的長度。但是現在我發現這個檢查是多餘的,感謝評論 – igoris 2011-02-16 12:32:02