我試圖確定兩個NSSets是否「相等」,但不是isEqualToSet。兩組中的項目是相同的類,但不是相同的對象,或者甚至是對同一對象的引用。他們將有一個屬性是相同的,但我們稱之爲'名稱'。單個屬性比較NSSets
我最好在比較這兩組來做一個簡單的集合計數測試,然後一個更復雜的objectsPassingTest:在一個集合中的每個項目上,確保具有相同名稱的項目在另一個集合中?我希望有更簡單的辦法來處理這種情況。
我試圖確定兩個NSSets是否「相等」,但不是isEqualToSet。兩組中的項目是相同的類,但不是相同的對象,或者甚至是對同一對象的引用。他們將有一個屬性是相同的,但我們稱之爲'名稱'。單個屬性比較NSSets
我最好在比較這兩組來做一個簡單的集合計數測試,然後一個更復雜的objectsPassingTest:在一個集合中的每個項目上,確保具有相同名稱的項目在另一個集合中?我希望有更簡單的辦法來處理這種情況。
您可以在兩組上都調用valueForKey:
並比較結果。
if ([[set1 valueForKey:@"name"] isEqualToSet:[set2 valueForKey:@"name"]]) {
// the sets match your criteria
}
通過文檔查看,似乎沒有辦法真正處理你的這種特殊情況。你將不得不編寫一些自定義代碼來處理這個問題。就個人而言,我會建議使用-sortedArrayUsingDescriptors:
,然後比較陣列,但這只是我。你也可以通過一組枚舉,然後使用-filteredSetUsingPredicate:
縮小另一個,並得到它的count
。
無論您使用哪種方法,都要考慮其可能不會超高效的事實。這可能是不可避免的,但是可能有些方法可以比其他方法更好。食物的思想。
我有同樣的問題,但我需要多個屬性的同時比較(類用戶與性能名稱和標識)。
我解決了這個通過添加返回一個的NSDictionary所需要的類屬性的方法:
- (NSDictionary *)itemProperties
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:self.name forKey:@"name"];
[dict setObject:self.id forKey:@"id"];
return dict;
}
,然後使用valueForKey:
凱文·巴拉德提到:
BOOL userSetsEqual = [[userSet1 valueForKey:@"itemProperties"]
isEqualToSet:[userSet2 valueForKey:@"itemProperties"]];
...其中userSet1和userSet2是包含用戶對象的NSSets。
哇,這太簡單了。調用valueForKey:在具有屬性的NSSet上返回一組對象,該對象是原始內容的鍵控屬性。 – Nick 2010-11-07 16:39:22