2015-10-12 6 views
23

new Set(['b', 'a', 'c']).sort()TypeError: set.sort is not a function फेंकता है। एक विशेष पुनरावृत्ति आदेश सुनिश्चित करने के लिए मैं Set कैसे सॉर्ट कर सकता हूं?मैं ES6 `Set` को कैसे क्रमबद्ध कर सकता हूं?

+5

सेट अव्यवस्थित हैं। – SLaks

+0

@ एसएलएक्स शायद वे हैं, लेकिन मैं अद्वितीय कुंजी के लाभ का लाभ उठाने में सक्षम होना चाहता हूं जो 'सेट की पेशकश है, जबकि अभी भी तत्वों को सॉर्ट करने में सक्षम है। जावा ['SortedSet's] प्रदान करता है (http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html), मैं केवल यह मान सकता हूं कि उन्होंने ऐसा इसलिए किया क्योंकि किसी ने वैध उपयोग केस की पेशकश की ... ES6 जावा नहीं होना चाहिए, लेकिन सॉर्टिंग सेट उपयोगी लगता है। – ericsoco

+0

आप 'sortedSet'' को सॉर्ट नहीं कर सकते हैं। यह एक वृक्ष संरचना का उपयोग करता है जो इन-ऑर्डर ट्रैवर्सल की अनुमति देता है, लेकिन आप इस ऑर्डर को 'ऐरेलिस्ट' के साथ * बदल नहीं सकते। यदि आप ऑर्डर बदलना चाहते हैं, तो सूचियों का उपयोग करें। –

उत्तर

47

एक सेट एक आदेशित सार डेटा संरचना नहीं है।

एक Set लेकिन हमेशा एक ही यात्रा के क्रम है - तत्व प्रविष्टि आदेश में [1], इसलिए जब आप (के लिए लूप के .. Symbol.iterator को फोन करके एक बार दोहराना विधि, द्वारा, या एक से) यह पुनरावृति आप हमेशा कि उम्मीद कर सकते हैं ।

आप हमेशा सेट को सरणी में परिवर्तित कर सकते हैं और उसे सॉर्ट कर सकते हैं।

Array.from(new Set(["b","a","c"])).sort(); 
[...(new Set(["b","a","c"]))].sort(); // with spread. 

[1] forEach और CreateSetIterator

+2

मेरा स्वयं का उत्तर हटा दिया गया है जो इस जैसा है, लेकिन मेरी टिप्पणी वापस जोड़ देगा: "मुझे उम्मीद है कि कोई ऐसा उत्तर दे सकता है जिसे 'सेट' से' ऐरे 'और पीछे जाने की आवश्यकता नहीं है। बहुत अक्षम लगता है । " – ericsoco

+6

@ericsoco ECMAScript spec 'ऑर्डरर्डसेट' निर्दिष्ट नहीं करता है लेकिन एक समान डेटा संरचना कई अन्य भाषाओं में मौजूद होती है - आमतौर पर एक पेड़ द्वारा कार्यान्वित की जाती है। आप उपयोगकर्तालैंड संग्रह पुस्तकालय का उपयोग कर सकते हैं, अर्थात् - लोकप्रिय इम्यूटेबलजेएस एक ['ऑर्डरर्डसेट '] प्रदान करता है (https://facebook.github.io/immutable-js/docs/#/OrderedSet)। वास्तव में यह कई मामलों में अधिक कुशल होगा। इसलिए यदि आपके पास 100 से अधिक तत्वों के साथ एक सेट है - तो मैं निश्चित रूप से इसके बजाय एक आदेशित सेट कार्यान्वयन का उपयोग करने पर विचार करता हूं। –

+0

कृपया ध्यान दें कि संख्याओं के सेट के लिए आपको एक तुलनात्मक कार्य क्रमबद्ध करना होगा: '(x, y) => x - y'। आपकी संख्या को अन्यथा शब्दावली से क्रमबद्ध किया जाएगा। – neo

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

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