2015-02-28 14 views
24

मैं एक बूलियन मान के आधार पर एक स्विफ्ट सरणी सॉर्ट करने के लिए एक तरह से तलाश कर रहा हूँ के आधार पर वस्तुओं की स्विफ्ट तरह सरणी।बूलियन मान

var boolSort = NSSortDescriptor(key: "selected", ascending: false) 
var array = NSArray(array: results) 
return array.sortedArrayUsingDescriptors([boolSort]) as! [VDLProfile] 

लेकिन मैं स्विफ्ट संस्करण के लिए देख रहा हूँ, किसी भी विचार:

मैं इसे NSArray करने के लिए एक डाली का उपयोग कर काम कर रहा है?

अद्यतन Arkku के लिए धन्यवाद, मैं इस निम्नलिखित कोड का उपयोग कर ठीक करने के लिए प्रबंधित किया है:

return results.sorted({ (leftProfile, rightProfile) -> Bool in 
    return leftProfile.selected == true && rightProfile.selected != true 
}) 
+0

फिर ee प्रलेखन। प्रश्न में अद्यतन, 'सत्य' के साथ बूलियन की तुलना अनावश्यक अव्यवस्था है, और बंद होने के आस-पास '()' को छोड़ने के लिए यह बेहतर स्विफ्ट शैली होगी (क्योंकि अंतिम बार बंद होने पर अनुमति दी जाती है)। – Arkku

उत्तर

45

स्विफ्ट की सरणियों sort साथ या sorted साथ एक नई सरणी के लिए जगह में हल हो सकता है। किसी भी फ़ंक्शन का एकल पैरामीटर दो तत्वों को बंद करने और true लौटने पर बंद होता है यदि पहले दूसरे को पहले आदेश दिया जाता है। बंद करने के पैरामीटर का उपयोग करने का सबसे छोटा तरीका उन्हें $0 और $1 के रूप में संदर्भित करना है।

उदाहरण के लिए (पहली सच बूलियन्स सॉर्ट करने के लिए):

// In-place: 
array.sort { $0.selected && !$1.selected } 

// To a new array: 
array.sorted { $0.selected && !$1.selected } 

(संपादित करें:। स्विफ्ट 3 और 4 के लिए अपडेट किया गया, पहले से sortsortInPlace था और sortedsort था)

+0

धन्यवाद, आपके उत्तर का उपयोग करके मैंने इसे स्विफ्ट में ठीक करने में कामयाब रहा है। मैंने जवाब के साथ अपना प्रश्न अपडेट कर लिया है। – Antoine

+0

कृपया ध्यान दें स्विफ्ट में 3.0 .sort प्रयोग किया जाता है –

1

स्विफ्ट मानक पुस्तकालय प्रदान करता है एक समारोह के अनुसार क्रमबद्ध कहा जाता है, जो एक ज्ञात प्रकार के मूल्यों की एक सरणी सॉर्ट करता है, एक छँटाई बंद है कि आप प्रदान करते हैं

reversed = sorted(array) { $0 > $1 } 
के उत्पादन के आधार पर

reversed एक नई सरणी जो हालत बंद में दिए गए के अनुसार हल हो जाएगा हो जाएगा।

1

न्यू

return results.sort { $0.selected && !$1.selected } 

पुरानी (स्विफ्ट 1.2 के लिए) (स्विफ्ट 1.0 के लिए)

मान लिया जाये कि results प्रकार [VDLProfile] की है और VDLProfile एक Bool सदस्य selected है:

return results.sorted { $0.selected < $1.selected } 

एस के लिए sorted

+2

यह मैं एक त्रुटि दे दी है कि: आह्वान नहीं किया जा सकता प्रकार का एक तर्क सूची के साथ 'छाँटे गए'। – Antoine

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