2015-10-20 9 views
5

का उपयोग कर सरणी अनुक्रमणिका द्वारा क्रमबद्ध करें मेरे पास आईडी की एक सरणी है: [INT]। अब मैं इन ऑब्जेक्ट्स को चुनने के लिए सभी ऑब्जेक्ट्स चुनना चाहता हूं लेकिन आईडी सरणी में आईडी के क्रम का पालन करने की आवश्यकता है।रीयल और एनएसपी्रेडिकेट

let IDs = [2, 6, 3, 4, 10, 9] 
let predicate = NSPredicate(format: "id IN %@", IDs) 
let objects = realm.objects(Item.self).filter(predicate) 

लेकिन अंत में, वस्तुओं को आईडी के साथ अलग तरीके से आदेश दिया गया था। क्या कोई तरीका है कि मैं इस ऑब्जेक्ट को सही क्रम में सॉर्ट कर सकता हूं?

उत्तर

5

आप sort() का उपयोग कर ऐसा कर सकते हैं:

let IDs = [2, 6, 3, 4, 10, 9] 
let predicate = NSPredicate(format: "id IN %@", IDs)  
do { 
    let realm = try Realm() 
    let objects = realm.objects(Item).filter(predicate).sort({ IDs.indexOf($0.id) < IDs.indexOf($1.id) }) 
} catch {   
} 
+1

यह दृष्टिकोण तरह कार्रवाई करने के लिए क्वेरी से मेल हर एक वस्तु की स्विफ्ट वर्ग उदाहरणों अमल में लाना होगा। इस उत्सुक भौतिकरण से बचने के लिए 'results.sorted (_ :)' का उपयोग करें। हालांकि, इस दृष्टिकोण को रीयलम द्वारा समर्थित कस्टम सॉर्टिंग एल्गोरिदम लागू करने के लिए अच्छा (आवश्यक भी) है। – jpsim

+0

धन्यवाद। यह काम। हालांकि, हमें .sort का उपयोग करने से पहले सभी ऑब्जेक्ट्स को पूरा करने की आवश्यकता होगी। Results.sorted आईडीएस सरणी में आईडी के क्रम का पता लगाने में सक्षम नहीं है। – mashix

+0

प्रश्न कस्टम सॉर्टिंग एल्गोरिदम के लिए पूछे गए, इसलिए वस्तुओं को भौतिक बनाने के लिए कोई रास्ता नहीं है। – joern

-1

क्षेत्र में, ResultsRealmCollectionType प्रोटोकॉल, एक sorted(_:) सदस्य समारोह है जो के अनुरूप है। इस समारोह SortDescriptors का एक दृश्य है, जो StringLiteralConvertible हैं लेता है, उन्हें बहुत आसान उपयोग करने के लिए कर रही है:

let realm = try! Realm() 
let IDs = [2, 6, 3, 4, 10, 9] 
let objects = realm.objects(Item).filter("id IN %@", IDs).sorted(["id"]) 
+0

मैंने सॉर्ट किए गए ("आईडी") का उपयोग करने की कोशिश की लेकिन मुझे इसकी आवश्यकता नहीं है। मैं सरणी आईडी में अपनी आईडी के क्रम से आइटम ऑर्डर करना चाहता हूं। – mashix

+2

मैं देखता हूं। फिर जोर्न का जवाब अब के लिए ऐसा करने का सबसे अच्छा तरीका है। – jpsim

संबंधित मुद्दे