我想在NSDictionary上使用大小寫敏感的JSON響應的情況,因爲有時候我的響應鍵類型有所不同,有些是駱駝大小寫,有些是小寫字母或其他混合組合。有沒有內置的功能來檢查這種情況下的非敏感情況?NSDictionary的大小寫不敏感的鍵
謝謝。
我想在NSDictionary上使用大小寫敏感的JSON響應的情況,因爲有時候我的響應鍵類型有所不同,有些是駱駝大小寫,有些是小寫字母或其他混合組合。有沒有內置的功能來檢查這種情況下的非敏感情況?NSDictionary的大小寫不敏感的鍵
謝謝。
最近我共享,可能滿足您的需求兩大類。它們提供不區分大小寫的操作(以NSDictionary
和NSMutableDictionary
方法命名),同時保留最初插入的密鑰。
試試看:
https://github.com/keeshux/ios-components/tree/master/Components/Utils/KSCIDictionary
我喜歡你使用映射字典來保存密鑰的大小寫,並保留搜索算法的「log(n)」複雜度。大多數解決方案都放棄了其中的一種。 – Peter
- (NSString *)lowercaseString
這是一個默認的NSString方法,只是在添加或讀取NSMutableDictionary時執行[key lowercaseString]。
雖然在這裏所有的答案都是正確的,但是在反序列化我的數據並插入鍵時,我必須一直使用這個概念,以小寫形式,現在一切都像魅力一樣。謝謝大家 – kforkarim
爲了方便起見,你可以寫一個'NS [Mutable] Dictionary'的CaseInsensitive [Mutable] Dictionary'子類。您可以重寫每個將鍵作爲參數的方法,並使用'[key lowercaseString]'調用超級方法。現在你的客戶端代碼仍然是完全可讀的:它只需要使用'CaseInsensitiveMutableDictionary'而不是'NSMutableDictionary'。 – Timo
最好的辦法是將NSDictionary的關鍵字設置爲全部小寫或全部大寫;
例如讓我說我有一個NSArray的字符串。我能得到的鍵名之前,我使用它,並通過使用lowercaseString或uppercaseString
NSString *itemName = @"lastName";
itemName = [itemName lowercaseString];
將它轉換,這將改變姓氏的字符串,或者如果我用uppercaseString這將是LASTNAME
,或者你也可以像這樣添加到字典時更改鍵名:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:objectToAdd forKey:[key uppercaseString]];
在我而言,我並不需要所有的字典方法或屬性。我只需要不區分大小寫的下標訪問。我做了一個自定義類(不的NSMutableDictionary的超類)和實現的方法,讓下標訪問,並做那些不區分大小寫:
- (id) objectForKeyedSubscript: (NSString *) key {
NSMutableDictionary *theData = self->data;
return theData[[key lowercaseString]];
}
- (void) setObject: (id) newValue forKeyedSubscript: (NSString *) key {
NSMutableDictionary *theData = self->data;
theData[[key lowercaseString]] = newValue;
}
你有沒有考慮剛轉換的關鍵全部小寫,然後將其添加到字典中?然後,無論何時查找密鑰,只需將其轉換即可。 – Matt
任何想法如何做到這一點? – kforkarim