2016-12-19 5 views
5
द्वारा

मेरी वस्तु लगता है:तरह दो गुण

object = [[section: "section1", order: "1"], 
      [section: "section2", order: "1"], 
      [section: "section1", order: "2"], 
      [section: "section2", order: "2"]] 

मैं इसे सुलझाने के लिए की तरह एक परिणाम करना चाहते हैं:

[[section: "section1", order: "1"], 
[section: "section1", order: "2"], 
[section: "section2", order: "1"], 
[section: "section2", order: "2"]] 

तो मैं अनुभाग द्वारा सॉर्ट करने के लिए की जरूरत है, और द्वारा प्रत्येक अनुभाग में आदेश।

है कि मैं क्या कर रही हूं:

return Observable.from(realm 
      .objects(Section.self).sorted(byProperty: "order", ascending: true) 

स्ट्रिंग "खंड .." सिर्फ उदाहरण के लिए, यह दूसरी बात यह तो मैं सिर्फ सॉर्ट करने के लिए चरित्र उपयोग नहीं कर सकते हो सकता है। मुझे एक्स स्ट्रिंग पर वास्तविक प्राथमिकता की आवश्यकता है।

+2

की संभावित डुप्लिकेट [स्विफ्ट - एकाधिक मापदंडों से वस्तुओं की क्रमबद्ध सरणी] (http://stackoverflow.com/questions/37603960/swift-sort-array-of-objects-with-multiple-criteria) – Hamish

+0

लगता है कि आप दायरे का उपयोग कर रहे हैं। आप इसे अपने प्रश्न में स्पष्ट रूप से नोट करेंगे। कुछ उत्तरों में दिखाए गए अनुसार स्विफ्ट ऐरे बनाने के बाद आप परिणाम को सॉर्ट कर सकते हैं, लेकिन आप [अन्य 'सॉर्टेड' विधि] का उपयोग कर सकते हैं (https://realm.io/docs/swift/latest/api/Classes/Results.html#/s: FC10RealmSwift7Results6sorteduRd__s8SequenceWd__8Iterator7Element_zVS_14SortDescriptorrFT2byqd ___ GS0_x_) 'क्षेत्र की Result' वर्ग की। जो एकाधिक 'सॉर्ट डिस्क्रिप्टर' ले सकता है। – OOPer

उत्तर

5

दो कारकों द्वारा यह सॉर्ट करने के लिए आप "हल कर" विधि के साथ अपने कस्टम तर्क कर सकते हैं: यहाँ एक उदाहरण है कि आप एक खेल के मैदान में परीक्षण कर सकते हैं है।

struct MyStruct { 
    let section: String 
    let order: String 
} 
let array = [MyStruct(section: "section1", order: "1"), 
      MyStruct(section: "section2", order: "1"), 
      MyStruct(section: "section1", order: "2"), 
      MyStruct(section: "section2", order: "2")] 

let sortedArray = array.sorted { (struct1, struct2) -> Bool in 
    if (struct1.section != struct2.section) { // if it's not the same section sort by section 
     return struct1.section < struct2.section 
    } else { // if it the same section sort by order. 
     return struct1.order < struct2.order 
    } 
} 
print(sortedArray) 
+0

यह शक्तिशाली है, आपके लिए बड़ा धन्यवाद! – Makaille

0
let object = [["section": "section1", "order": "2"], 
       ["section": "section2", "order": "2"], 
       ["section": "section1", "order": "1"], 
       ["section": "section2", "order": "1"], 
       ["section": "section5", "order": "3"], 
       ["section": "section6", "order": "1"], 
       ["section": "section5", "order": "1"]] 

    let Ordered = object.sorted{$0["order"]! < $1["order"]! } 

    let OrderedObjects = Ordered.sorted{$0["section"]! < $1["section"]! } 


    print(OrderedObjects) 

//[["section": "section1", "order": "1"], ["section": "section1", "order": "2"], ["section": "section2", "order": "1"], ["section": "section2", "order": "2"], ["section": "section5", "order": "1"], ["section": "section5", "order": "3"], ["section": "section6", "order": "1"]] 
संबंधित मुद्दे