Bir sınıf Etkinliğimiz olduğunu ve 2 özelliğe sahip olduğunu varsayalım: action (NSString) ve date (NSDate).Nesnelerinin özelliklerini karşılaştıran diziden kopyaları kaldırın
Ve bir dizi Olay nesnem var. Sorun, "tarih" özelliklerinin eşleşmesidir.
Yinelenen kopyaları çıkarmam gerekiyor, yani aynı tarih olan 2 farklı nesne çoğaltıyor.
Yinelenen dizeleri veya nsdates dizilerinden kaldırabilirim, karşılaştırmaları kolaydır. Ama özellikleri karşılaştırılacak karmaşık nesnelerle nasıl yapılır?
Şimdiye kadar ne yaptığımı sorma, çünkü aklıma gelen tek şey bir kabarcık sıralaması, , ama bir acemi çözümü ve yavaş.
Her türlü yardım son derece takdir edilir (bağlantılar, tuts, kod).
Şimdiden teşekkürler.
DÜZENLEME dasblinkenlight için
teşekkürler, ben özel bir yöntem yaptık: Burada
- (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
nesne aittir sınıfın adıdır ve propertyName
olduğunu karşılaştırmak istediğiniz nesnenin mülkiyeti.
Self.arrayWithObjects öğesinin, YourClass öğesinin nesnelerini içerdiğini varsayalım.
onu doldurma sonra
self.arrayWithObjects = [self removeDuplicatesInArray:self.arrayWithObjects];
kullanmak ve bitirdiniz.
Tüm krediler dasblinkenlight. Şerefe!
Dizide zaten bulunan Olaylar'dan başka biriyle eşit olay nesnelerini eklemeyi engellemek için öneriyi kullanırsanız çalışır? – LuisEspinoza
Naah, dizi zaten büyük bir JSON'dan dolduruluyor. İşlem çok karmaşık, sonra kopyaları kaldırmak daha kolay olduğunu düşünüyorum. –
Diziyi tarihe göre sıralayın (NSArray öğesinin birkaç sıralanmışArray ... işlevinden birini kullanarak oldukça kolaydır), ardından sıralanmış diziye adım atın, yeni bir NSMutableArray öğesine kopyalayın, sonuncu tarihle aynı tarihe sahip herhangi bir öğeyi atlayın . –