दिलचस्प पोस्ट
App.config से कनेक्शन स्ट्रिंग प्राप्त करें event.returnValue नापसंद है इसके बजाय मानक event.preventDefault () का उपयोग करें लेनदेन या सेव चेंज (झूठे) और AcceptAllChanges () का उपयोग करना? पायथन 3.6 में चर एनोटेशन क्या हैं? PHP + MySQL लेनदेन उदाहरण छवि का आकार बदलना और गुणवत्ता के नुकसान के बिना जेपीएनएल या जेएलैबल में प्रदर्शित करना क्या सत्र चर के लिए सीमाएं हैं? जावा के लिए ग्रहण आईडीई – पूर्ण डार्क थीम क्या जावा में स्वैप विधि लिखना संभव है? WPF में कैनवास में ऑब्जेक्ट्स को जोड़ने की गति स्क्रॉल करें और सूची दृश्य में नीचे स्क्रॉल करें फ़ाइल या विधानसभा को लोड नहीं किया जा सका HRESULT: 0x80131515 (जब नेटवर्क ड्राइव पर असेंबली संदर्भ में MVC प्रोजेक्ट को नियंत्रक जोड़ना) एक अनंत सूची की परिमित समझ एसवीजी के आंतरिक डोम तक पहुँचने वाली जावास्क्रिप्ट एक समय देरी के साथ एक कार्य दोहराएं?

लूप के लिए स्विफ्ट: सूचक के लिए, तत्व में तत्व?

क्या कोई फ़ंक्शन है जिसका उपयोग मैं एक सरणी पर पुनरावृत्त करने के लिए कर सकता हूं और सूचक और तत्व दोनों, जैसे अजगर की गणना करना है?

for index, element in enumerate(list): ... 

Solutions Collecting From Web of "लूप के लिए स्विफ्ट: सूचक के लिए, तत्व में तत्व?"

हाँ। स्विफ्ट 3.0 के रूप में, यदि आपको अपने तत्व के साथ प्रत्येक तत्व के लिए सूचकांक की आवश्यकता है, तो आप सरणी पर पुनरावृति करने के लिए enumerated() विधि का उपयोग कर सकते हैं। यह सरणी में प्रत्येक आइटम के लिए इंडेक्स से बना एक ट्यूपल और मान देता है। उदाहरण के लिए:

 for (index, element) in list.enumerated() { print("Item \(index): \(element)") } 

स्विफ्ट 3.0 से पहले और स्विफ्ट 2.0 के बाद, फ़ंक्शन को enumerate() कहा जाता है:

 for (index, element) in list.enumerate() { print("Item \(index): \(element)") } 

स्विफ्ट 2.0 से पहले, enumerate एक वैश्विक फ़ंक्शन था।

 for (index, element) in enumerate(list) { println("Item \(index): \(element)") } 

स्विफ्ट 2 के साथ शुरू, गणना समारोह को इस तरह संग्रह पर कॉल करने की आवश्यकता है:

 for (index, element) in list.enumerate() { print("Item \(index): \(element)") } 

स्विफ्ट 3 Array लिए enumerated() नामक एक विधि प्रदान करता है enumerated() में निम्नलिखित घोषणा है:

 func enumerated() -> EnumeratedSequence<Array<Element>> 

जोड़े (n, x) का अनुक्रम लौटाता है, जहां n शून्य से शुरू होने वाले लगातार पूर्णांक का प्रतिनिधित्व करता है, और x अनुक्रम के एक तत्व का प्रतिनिधित्व करता है।


सरलतम मामलों में, आप लूप के लिए enumerated() उपयोग कर सकते हैं

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

 let list = ["Car", "Bike", "Plane", "Boat"] for (index, element) in list.enumerate() { print(index, ":", element) } /* prints: 0 : Car 1 : Bike 2 : Plane 3 : Boat */ 

हालांकि ध्यान दें कि आप लूप के लिए enumerated() का उपयोग करने तक सीमित नहीं हैं

वास्तव में, यदि आप निम्न कोड की तरह कुछ के लिए लूप के साथ enumerated() का उपयोग करने की योजना बना रहे हैं, तो आप इसे गलत कर रहे हैं:

 let list = [Int](1...5) var arrayOfTuples = [(Int, Int)]() for (index, element) in list.enumerated() { arrayOfTuples += [(index, element)] } print(arrayOfTuples) // prints [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)] 

ऐसा करने का सही तरीका है:

 let list = [Int](1...5) let arrayOfTuples = Array(list.enumerated()) print(arrayOfTuples) // prints [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)] 

वैकल्पिक रूप से, आप map साथ enumerated() उपयोग भी कर सकते हैं:

 let list = [Int](1...5) let arrayOfDictionaries = list.enumerated().map { (a, b) in return [a : b] } print(arrayOfDictionaries) // prints [[0: 1], [1: 2], [2: 3], [3: 4], [4: 5]] 

इसके अलावा, हालांकि इसमें कुछ सीमाएं हैं , forEach लिए लूप के लिए एक अच्छा प्रतिस्थापन हो सकता है:

 let list = [Int](1...5) list.reversed().enumerated().forEach { print($0, ":", $1) } /* prints: 0 : 5 1 : 4 2 : 3 3 : 2 4 : 1 */ 

enumerated() और makeIterator() का उपयोग करके, आप मैन्युअल रूप से अपने Array पर फिर से makeIterator() सकते हैं।

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

 import UIKit class ViewController: UIViewController { var generator = ["Car", "Bike", "Plane", "Boat"].enumerated().makeIterator() // Link this IBAction to a UIButton in your storyboard @IBAction func iterate(_ sender: UIButton) { let tuple: (offset: Int, element: String)? = generator.next() print(String(describing: tuple)) } } /* Will print the following lines for 6 `touch up inside`: Optional((0, "Car")) Optional((1, "Bike")) Optional((2, "Plane")) Optional((3, "Boat")) nil nil */ 

मुझे यह जवाब मिला जब एक शब्दकोश के साथ ऐसा करने का तरीका तलाश रहा था, और यह पता चला कि इसे अनुकूलित करने में काफी आसान है, बस तत्व के लिए ट्यूपल पास करें

 // Swift 2 var list = ["a": 1, "b": 2] for (index, (letter, value)) in list.enumerate() { print("Item \(index): \(letter) \(value)") } 

बेसिक गणना करना

 for (index, element) in arrayOfValues.enumerate() { // do something useful } 

गणना, फ़िल्टर और मानचित्र

हालांकि, मैं अक्सर नक्शा या फिल्टर के साथ संयोजन में गणना का उपयोग करता हूं उदाहरण के लिए कुछ सरणियों पर परिचालन के साथ।

इस सरणी में मैं अजीब या यहां तक ​​कि अनुक्रमित तत्वों को फ़िल्टर करना चाहता था और इनट्स से डबल्स में परिवर्तित करना चाहता था। तो enumerate() आपको सूचकांक और तत्व मिलता है, फिर फ़िल्टर सूचकांक की जांच करता है, और अंत में परिणामी ट्यूपल से छुटकारा पाने के लिए मैं इसे केवल तत्व को मैप करता हूं

 let evens = arrayOfValues.enumerate().filter({ (index: Int, element: Int) -> Bool in return index % 2 == 0 }).map({ (_: Int, element: Int) -> Double in return Double(element) }) let odds = arrayOfValues.enumerate().filter({ (index: Int, element: Int) -> Bool in return index % 2 != 0 }).map({ (_: Int, element: Int) -> Double in return Double(element) }) 

यह गणन के लूप का सूत्र है:

 for (index, value) in shoppingList.enumerate() { print("Item \(index + 1): \(value)") } 

अधिक जानकारी के लिए आप यहां जांच सकते हैं।

स्विफ्ट 3 के साथ शुरू, यह है

 for (index, element) in list.enumerated() { print("Item \(index): \(element)") } 

.enumerate() का उपयोग करता है, लेकिन यह तत्व का सही इंडेक्स प्रदान नहीं करता है; यह केवल 0 के साथ एक इंट शुरुआत करता है और प्रत्येक लगातार तत्व के लिए 1 से बढ़ता है। यह आमतौर पर अप्रासंगिक है, लेकिन ArraySlice प्रकार के साथ प्रयोग किए जाने पर अप्रत्याशित व्यवहार की संभावना है निम्न कोड लें:

 let a = ["a", "b", "c", "d", "e"] a.indices //=> 0..<5 let aSlice = a[1..<4] //=> ArraySlice with ["b", "c", "d"] aSlice.indices //=> 1..<4 var test = [Int: String]() for (index, element) in aSlice.enumerate() { test[index] = element } test //=> [0: "b", 1: "c", 2: "d"] // indices presented as 0..<3, but they are actually 1..<4 test[0] == aSlice[0] // ERROR: out of bounds 

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

एक्सकोड 8 और स्विफ्ट 3: एरे का इस्तेमाल किया जा सकता है tempArray.enumerate ()

उदाहरण:

 var someStrs = [String]() someStrs.append("Apple") someStrs.append("Amazon") someStrs += ["Google"] for (index, item) in someStrs.enumerated() { print("Value at index = \(index) is \(item)"). } 

कंसोल:

 Value at index = 0 is Apple Value at index = 1 is Amazon Value at index = 2 is Google