2016-07-16 22 views
6

स्विफ्ट 3 में एनएसएमयूटेबल डिक्शनरी को सॉर्ट करने का प्रयास करना, स्विफ्ट 2 से कोड अब मेरे लिए काम नहीं करता है (विभिन्न त्रुटियां)।स्विफ्ट 3

मैं अपने मूल्यों, जो तैरता हैं के आधार पर अपने शब्दकोश सॉर्ट करने के लिए निम्नलिखित कोड का उपयोग करने की कोशिश कर रहा हूँ:

var sortedDict = unsortedDict.allValues.sorted({ $0 < $1 }).flatMap({ floatedlotterydictionary[$0] }) 

अनिवार्य रूप से, मैं इस अवर्गीकृत शब्दकोश चाहते हैं ...

{ 
a = "1.7"; 
b = "0.08"; 
c = "1.4"; 
} 

.. इस क्रमबद्ध शब्दकोश में बदलने के लिए ...

{ 
b = "0.08"; 
c = "1.4"; 
a = "1.7"; 
} 

लेकिन उपरोक्त से कोड की उस पंक्ति का उपयोग करके $0 < $1 भाग के लिए त्रुटि "तर्क प्रकार anyobject प्रकार एनएससीपीआईंग के अनुरूप नहीं है"। तो मैं स्विफ्ट 3 में अपने मूल्यों से एक शब्दकोश को कैसे क्रमबद्ध कर सकता हूं?

(नोट: कोड का यह लाइन this answer से हिस्से में आया था।)

में Xcode 8 बीटा 1 मैं स्विफ्ट 3 उपयोग कर रहा हूँ।

+0

एक शब्दकोश परिभाषा से अव्यवस्थित है। आपका अनुरोधित परिणाम एक शब्दकोश के रूप में प्राप्त करना असंभव है। और स्विफ्ट में 'NSMutableDictionary' का उपयोग न करें। यह स्विफ्ट 'डिक्शनरी' से बिल्कुल संबंधित नहीं है। – vadian

+0

और हाँ, मुझे समझ में आता है कि एक शब्दकोश अनियंत्रित है ... लेकिन मैं इसे आदेश देना चाहता हूं;)। और हालांकि यह कुछ हद तक असंबंधित है, इसके साथ क्या गलत है? – owlswipe

उत्तर

7

ठीक है। सामान्य शब्दकोश पर उपलब्ध संग्रह विधियां अभी भी उपलब्ध हैं, हालांकि वस्तुओं के प्रकार को लागू नहीं किया जाता है, जो एक उत्तराधिकारी को असुरक्षित जोड़ता है।

docssorted में एक बंद हो जाता है जो हमें एक ही समय में कुंजी और मूल्य तक पहुंचने देता है और इसे एक तत्व के रूप में मानता है और इसलिए अपना शब्दकोश सॉर्ट करता है।

let k: NSMutableDictionary = ["a" : 1.7, "b" : 0.08, "c" : 1.4] 
print(k.sorted(isOrderedBefore: { (a, b) in (a.value as! Double) < (b.value as! Double) })) 

कास्टिंग के लिए आवश्यक है, के रूप में a.value और b.value के प्रकार AnyObject है। यह मेरे कंप्यूटर पर काम करता है, एक्सकोड संस्करण 8.0 बीटा (8 एस 128 डी) चला रहा है।

+0

'एनएसएमयूटेबल डिक्शनरी ** ** ** स्विफ्ट 'शब्दकोश' – vadian

+0

के लिए पुल नहीं है मैं अब लैपटॉप पर हूं - धन्यवाद। – Mrwerdo

+1

परिणाम ट्यूबल की एक सरणी है, न कि शब्दकोश। – vadian

4

वहाँ भी इस तरह से है:

let k = ["a" : 1.7, "b" : 0.08, "c" : 1.4] 

print(k.flatMap({$0}).sort { $0.0.1 < $0.1.1 })