假設我有一個類Event,它有兩個屬性:action(NSString)和date(NSDate)。從數組中刪除重複項,比較其對象的屬性
並假設我有一個Event對象的數組。問題是「日期」屬性可以匹配。
我需要刪除重複項,這意味着2個不同的對象具有相同的日期是重複的。
我可以刪除任何字符串或nsdates數組中的重複項,它們很容易比較。但是如何用複雜的對象來完成它們的屬性比較呢?
不要問我到目前爲止我做了什麼,因爲我唯一想到的就是冒泡,,但這是一個新手解決方案,並且很慢。
非常感謝任何幫助(鏈接,內容,代碼)。
在此先感謝。
編輯
感謝dasblinkenlight,我做了一個自定義的方法:
- (NSArray *)removeDuplicatesInArray:(NSArray*)arrayToFilter{
NSMutableSet *seenDates = [NSMutableSet set];
NSPredicate *dupDatesPred = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind) {
YourClass *e = (YourClass*)obj;
BOOL seen = [seenDates containsObject:e.propertyName];
if (!seen) {
[seenDates addObject:e.when];
}
return !seen;
}];
return [arrayToFilter filteredArrayUsingPredicate:dupDatesPred];
}
這裏YourClass
是對象所屬的類的名稱,propertyName
是您將要比較的對象的屬性。
假設self.arrayWithObjects包含YourClass的對象。
填充它後,使用
self.arrayWithObjects = [self removeDuplicatesInArray:self.arrayWithObjects];
和你做。
所有學分均通過dasblinkenlight。 乾杯!
如果採取措施避免添加日期等於另一個事件對象的事件已經存在於數組中? – LuisEspinoza
Naah,該數組已經從巨大的JSON中填充。這個過程太複雜了,我認爲之後刪除重複項更容易。 –
按日期對數組進行排序(這很容易使用NSArray的幾個sortedArray ...函數之一),然後遍歷排序後的數組,複製到新的NSMutableArray,跳過與最後一個日期相同的任何元素。 –