2015-05-14 7 views
7

के साथ अद्वितीय/विशिष्ट मान लौटें मेरे पास Message/RLMObject मॉडल है जिसमें NSString *jabberID संपत्ति/पंक्ति है और मैं उस पंक्ति के अंदर प्रत्येक unique मान पुनर्प्राप्त करना चाहता हूं।रीयलम क्वेरी

दूसरे शब्दों में, मैं अपने Message मॉडल से गैर-दोहराए गए jabberID मानों को पुनर्प्राप्त करना चाहता हूं। क्या कोई इसे समझने में मदद कर सकता है?

जिस तरह से मैं coredata के साथ उपयोग करने के लिए उपयोग करता हूं returnsDistinctResultsNSFetchRequest पर सेटिंग का उपयोग कर रहा था।

उत्तर

6

मुझे पता चला कि रियलम अभी तक अलग-अलग प्रश्नों का समर्थन नहीं करता है। अच्छी खबर यह है कि मुझे इस github issue पर इसके लिए एक समाधान भी मिला।

ऑब्जेक्टिव-सी

RLMResults *messages = [Message allObjects]; 
NSMutableArray *uniqueIDs = [[NSMutableArray alloc] init]; 
NSMutableArray *uniqueMessages = [[NSMutableArray alloc] init]; 
for (Message *msg in messages) { 
    NSString *jabberID = msg.jabberID; 
    Message *uniqueMSG = (Message *)msg; 
    if (![uniqueIDs containsObject:jabberID]) { 
     [uniqueMessages addObject:uniqueMSG]; 
     [uniqueIDs addObject:jabberID]; 
    } 
} 

स्विफ्ट 3,0

let realm = try! Realm() 
let distinctIDs = Set(realm.objects(Message.self).value(forKey: "jabberID") as! [String]) 
var distinctMessages = [Message]() 
for jabberID in distinctIDs { 
    if let message = realm.objects(Message.self).filter("jabberID = '\(jabberID)'").first { 
     distinctMessages.append(message) 
    } 
} 
+0

क्या 'allObjects'' परिणाम 'संग्रह वापस करता है? – ricardopereira

+1

हां, यह सभी ऑब्जेक्ट्स का परिणाम संग्रह वापस कर देगा। –

+0

मैं देखता हूं, तो यह दृष्टिकोण 'परिणाम' से आलसी मूल्यांकन खो देगा। – ricardopereira

12

कार्यात्मक प्रोग्रामिंग दृष्टिकोण के बाद से स्विफ्ट यह है, और क्षेत्र आलसी लोड; के रूप में आसान नहीं/उपलब्ध एक कम से कम ऑब्जेक्टिव-सी स्विफ्ट में लेकिन के लिए समाधान: स्विफ्ट

let distinctTypes = reduce(Realm().objects(User), []) { $0 + (!contains($0, $1.type) ? [$1.type] : []) } 

UPDATED:

स्विफ्ट को कम गहन एक प्रदर्शन की तरह है, एक गुच्छा का आवंटन इंटरमीडिएट सरणी के बजाय, निम्नलिखित को बेहतर प्रदर्शन के अनुसार होना चाहिए, लेकिन स्पष्ट रूप से

let distinctTypes = Array(Set(Realm().objects(User).valueForKey("type") as! [String])) 
संबंधित मुद्दे