मान लीजिए कि मेरे पास क्लास इवेंट है, और इसमें 2 गुण हैं: एक्शन (एनएसएसटींग) और डेट (एनएसडीएटी)।अपनी ऑब्जेक्ट्स के गुणों की तुलना में सरणी से डुप्लिकेट निकालें
और मान लीजिए कि मेरे पास ईवेंट ऑब्जेक्ट्स की एक सरणी है। समस्या यह है कि "तिथि" गुण मिलान कर सकते हैं।
मुझे डुप्लिकेट को हटाने की आवश्यकता है, जिसका अर्थ है कि उसी तारीख के साथ 2 अलग-अलग ऑब्जेक्ट्स डुप्लिकेट हैं।
मैं स्ट्रिंग्स या एनएसडेट्स की किसी भी सरणी में डुप्लिकेट को हटा सकता हूं, उन्हें तुलना करना आसान है। लेकिन जटिल वस्तुओं के साथ इसे कैसे करें, जहां उनकी संपत्तियों की तुलना की जानी चाहिए?
मुझसे मत पूछो कि मैंने अब तक क्या किया है, क्योंकि मेरे दिमाग में आने वाली एकमात्र चीज एक बबल प्रकार है, लेकिन यह एक नौसिखिया समाधान है, और धीमा है।
काफी किसी भी मदद की अत्यधिक सराहना की जाती है (लिंक, टट्स, कोड)।
अग्रिम धन्यवाद।
संपादित
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 में आपके क्लास की ऑब्जेक्ट्स हैं।
यह पॉप्युलेट करने के बाद,
self.arrayWithObjects = [self removeDuplicatesInArray:self.arrayWithObjects];
का उपयोग करें और आप कर रहे हैं।
सभी क्रेडिट्स dasblinkenlight के लिए। चीयर्स!
काम करता है यदि आप पहले से ही सरणी में मौजूद घटनाओं से किसी अन्य के बराबर तारीख के साथ ईवेंट ऑब्जेक्ट्स को जोड़ने से रोकने के लिए अपमान करते हैं? – LuisEspinoza
नाह, सरणी पहले से ही एक विशाल JSON से आबादी है। प्रक्रिया बहुत जटिल है, मुझे लगता है कि डुप्लिकेट को बाद में निकालना आसान है। –
तिथि के अनुसार सरणी को सॉर्ट करें (जो कई प्रकार के एरे ... एनएसएआरएआरई के कार्यों का उपयोग करके काफी आसान है), फिर सॉर्ट किए गए सरणी के माध्यम से कदम उठाएं, एक नए एनएसएमयूटेबलएरे में कॉपी करें, किसी भी तत्व को छोड़ दें जो पिछले एक जैसा दिनांक है । –