Wednesday 15 April 2015

Swift map(_:) extension for Set() ? -


  संख्या देंसेट = सेट (1 ... 11) divideSet = numberSet.map ({$ 0/10} ) // त्रुटि: सेट के नाम का कोई सदस्य नहीं है :(  

स्विफ्ट 1.2 का समर्थन करता है सेट () unordered संग्रह के लिए, लेकिन map (_ :) सेट पर काम करने के लिए नहीं लगता है, इसलिए मैं अपने खेल के मैदान पर स्मार्ट पाने का फैसला किया और कोशिश की:

  string string = सेट (नक्शा (numberSet, {string ($ 0) ) "}") Println (stringSet) stringSet = ["2", "11", "1", "8", "6", "4", "3", "9", "7", "10" , "5]  

यह काम करने के लिए प्रतीत होता है। इसलिए मैंने सेट करने का प्रयास किया:

  एक्सटेंशन सेट करें {func map & lt; U & gt; (रूपांतरण: (टी) - & gt; यू) - & gt; सेट & lt; U & gt; {सेट (स्विफ्ट। मैप (स्वयं, ट्रांसमैट))}} त्रुटि: "सेट (टी) के लिए प्रारंभकर्ता नहीं मिल सकता है जो कि प्रकार के तर्क को स्वीकार करता है"  

और मुझे लगता है कि यह एक अच्छा कारण है कि यह काम क्यों नहीं करता है, यहां इस उदाहरण की तरह:

  smarDividSet = सेट करें (नक्शा (nu MberSet, {$ 0/2})) println (smarDividSet) smartDividSet = "[5, 0, 2, 4, 1, 3]" // किसी तरह तत्व यह है कि सेट गायब हो रहे हैं  

मैप का उपयोग करने के लिए कैसे सेट करें (_) मज़बूती से? दोस्तों का धन्यवाद।

आप लगभग वहां थे। किसी कारण से, लौटे हुए सेट का सामान्य प्रकार स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए:

  एक्सटेंशन सेट करें {func map & lt; U & gt; (रूपांतरण: (टी) - & gt; यू) - & gt; सेट करें & lt; u & gt; {वापसी सेट & lt; U & gt; (स्विफ्ट.मैप (स्वयं, ट्रांसमैट))}}  

उदाहरण:

  नंबर देंसेट = सेट करें (1 ... 11) divideSet = numberSet.map {$ 0/2} println (divideSet) // [5, 0, 2, 4, 1, 3]  

परिणामस्वरूप सेट में कम तत्व हैं क्योंकि पूर्णांक प्रभाग $ 0/2 छंटनी भागफल, उदा। दोनों ही 4/2 और 5/2 दोनों समान तत्व के लिए मानचित्र 2. यह फ्लोटिंग प्वाइंट डिवीजन के साथ नहीं होता है:

  चलाना floatdivideSet = numberSet.map {डबल ($ 0) / 2.0} println (  
  

कोड> विस्तार सेट {func map & lt; U & gt; (रूपांतरण: (टी) - & gt; यू) - & gt; सेट करें & lt; u & gt; {वापसी सेट & lt; U & gt; (आलसी (स्व) .मैप (ट्रांस्फ़ॉर्म))}}

यहां आलसी (स्वयं) एक लाज़िफ़ोरवर्ड कलेक्शन जिसमे एक नक्शा () विधि है और वह LazyForwardCollection दोबारा देता है। लाभ यह हो सकता है कि कोई भी मध्यवर्ती सरणी नहीं बनाई गई है।


अपडेट: स्विफ्ट 2 और 3 के साथ बहुत कुछ बदला है। सेट का सामान्य प्लेसहोल्डर कोड> अब तत्व के बजाय T है, और सभी संग्रह में एक मानचित्र () विधि है जो सरणी देता है।

वहां भी एक सेट -> gt; मैपिंग सेट करें (जैसे कि एक ही परिणाम के लिए विभिन्न तत्व मानचित्रण)। दूसरी तरफ, ऐसे मैपिंग के लिए उपयोग-केस हो सकता है, इसलिए यह स्विफ्ट 3 (अब एक अलग नाम का उपयोग कर रहा है) के लिए एक अपडेट है।

  विस्तार सेट {func setmap & lt; U & gt; (रूपांतरण: (तत्व) - & gt; यू) - & gt; सेट करें & lt; u & gt; {Return Set & lt; U & gt; (self.lazy.map (transform))}}  

उदाहरण:

  संख्या दें = सेट करें (1 ... 11) divideSet = numberSet.setmap {$ 0/2} प्रिंट (डिवाइडसेट) // [5, 0, 2, 4, 1, 3]  

No comments:

Post a Comment