2015-07-30 8 views
39

स्विफ्ट 2.0 में, आप किसी संपत्ति द्वारा कस्टम ऑब्जेक्ट्स की सरणी को सॉर्ट करने के बारे में कैसे जाएंगे? मैं स्विफ्ट 1.2 में जानता हूं, यह क्रमबद्ध() और सॉर्ट() का उपयोग करके किया गया था। हालांकि, ये विधियां अब एक्सकोड 7 बीटा 4 में काम नहीं करतीं। धन्यवाद!स्विफ्ट 2.0 संपत्ति द्वारा ऑब्जेक्ट्स का सॉर्टिंग एरे

उदाहरण के लिए:

class MyObject: NSObject { 
    var myDate : NSDate 
} 

... 

let myObject1 : MyObject = MyObject() //same thing for myObject2, myObject3 

var myArray : [MyObject] = [myObject1, myObject2, myObject3] 

//now, I want to sort myArray by the myDate property of MyObject. 
+0

हमेशा बबल प्रकार होता है। – SalmonKiller

उत्तर

76

स्विफ्ट 2 में:

  • आप sort विधि का उपयोग कर सकते हैं, दो तिथियों की तुलना करने के compare का उपयोग कर:

    let sortedArray = myArray.sort { $0.myDate.compare($1.myDate) == .OrderedAscending } // use `sorted` in Swift 1.2 
    
  • या, यदि आप मूल सरणी क्रमबद्ध करना चाहते हैं, आप कर सकते हैं sortInPlace:

    myArray.sortInPlace { $0.myDate.compare($1.myDate) == .OrderedAscending } // use `sort` in Swift 1.2 
    

स्विफ्ट 3 में:

  • सरणी के अनुसार क्रमबद्ध गायन वापस जाने के लिए, sorted का उपयोग करें, नहीं sort

    let sortedArray = myArray.sorted { $0.myDate < $1.myDate } 
    
  • जगह में सॉर्ट करने के लिए, यह अब बस sort:

    myArray.sort { $0.myDate < $1.myDate } 
    

और स्विफ्ट 3 के Date प्रकार के साथ, आप < ऑपरेटर का उपयोग कर सकते हैं।

+0

स्ट्रिंग्स को छंटाई के लिए उदाहरण myArray = ["जेन", "चरण 12", "ऐप्पल"] क्रमबद्ध करेंअरे = myArray.sort ({x, y वापसी x।localizedStandardCompare (y) == NSComparisonResult.OrderedAscending }) डंप (सॉर्टेडएरे) – Abhijeet

+0

स्विफ्ट 3 काम नहीं करता –

+0

स्विफ्ट 3 प्रस्तुति ठीक काम करती है। मुझे संदेह है कि आपके कोड में कुछ और गलत है। यदि आपको अभी भी समस्याएं आ रही हैं, तो अपना खुद का पोस्ट करें, स्टैक ओवरफ़्लो पर [नया समस्या] के पुन: उत्पन्न उदाहरण [http://stackoverflow.com/help/mcve) पर नया प्रश्न पोस्ट करें। – Rob

-2

तरह अब sortInPlace (या कुछ इसी तरह) प्रकार के रूप में एक ही मानकों के साथ है।

10

यदि आप कस्टम ऑब्जेक्ट्स की मूल सरणी को सॉर्ट करना चाहते हैं। यहाँ एक और तरीका में ऐसा करने की स्विफ्ट 2,1

var myCustomerArray = [Customer]() 
myCustomerArray.sortInPlace {(customer1:Customer, customer2:Customer) -> Bool in 
     customer1.id < customer2.id 
    } 

कहाँ id एक पूर्णांक है। आप String के लिए उसी < ऑपरेटर का भी उपयोग कर सकते हैं।

आप एक उदाहरण यहाँ पर देख कर इसके उपयोग के बारे में अधिक सीख सकते हैं: Swift2: Nearby Customers

+0

यह भी मुझे लगता है कि यह भी छोटा हो सकता है। $ 0 और $ 1 का उपयोग करना –

0

में तेजी से 3.0

मैं इस धारणा उदाहरण सवाल में पूछा के रूप में ही ले लिया है।

i.e customObject वेरिएबल myDate के साथ MyObject है। MyObject की सरणी myArray है। हम इस तरह सॉर्ट कर सकते हैं।

myArray.sort(by: { (one: MyObject, two: MyObject) -> Bool in 
    one. myDate < two. myDate 
}) 
संबंधित मुद्दे