我使用的NSSet以下星座:的NSSet使用詞典:獲取由值對象的關鍵
NSSet {
NSDictionary {
"Unique-Identifier-Key": Unique Value
"Key2": ValueABC
"Key3": ValueDEF
}
NSDictionary {
"Unique-Identifier-Key": Unique Value
"Key2": ValueFGH
"Key3": ValueJKL
}
NSDictionary {
"Unique-Identifier-Key": Unique Value
"Key2": ValueRST
"Key3": ValueXYZ
}
}
我在尋找一種方式來獲得一個字典出的NSSet通過其獨特的價值。 NSSet中有很多NSDictionaries,因此我正在尋找最佳性能的方式。
如何通過以下方式使用(NSSet *)objectsPassingTest:(BOOL (^)(id obj, BOOL *stop))predicate
?
NSString *idSearched = ...;
NSSet *results = [MySet objectsPassingTest:^(id obj,BOOL *stop){
if ([obj valueForKey:@"Unique-Identifier-Key"] == idSearched) return YES;
else return NO;
}];
這是最高性能的解決方案嗎?據我所知,NSSet使用NSSet的性能比NSArrays更好。而且我不需要一個有序的對象序列。
謝謝,這聽起來很合乎邏輯。如果Unique-Identifier-Key是NSString以外的對象(例如NSManagedObjectID)會怎樣?我是否必須將該密鑰轉換爲NSString,還是可以與其他類一起工作(我讀過用於密鑰的類必須採用NSCopying協議)?以及如何使用自定義鍵的性能? – FrankZp
@FrankZp:這是正確的,鍵必須採用'NSCopying',但你已經在字典中使用它,所以不應該有任何問題。使用自定義鍵時的性能直接關係到'hash'方法的質量。對於大多數Cocoa類型,例如'NSString','hash'方法非常好。絕對最壞的情況是O(n)的複雜性(這與你現在的搜索方式在概念上沒有什麼不同),但你仍然可以從更簡單的代碼中獲益。 – dreamlax