यदि मैं एक सरणी को गिनना चाहता हूं (map()
फ़ंक्शन के लिए कहें जहां मुझे इसके मूल्य के साथ तत्व की अनुक्रमणिका का उपयोग करने की आवश्यकता होगी), तो मैं enumerate()
फ़ंक्शन का उपयोग कर सकता हूं। उदाहरण के लिए:मूल सूचकांक का उपयोग करके एक टुकड़ा कैसे गणना करें?
import Foundation
let array: [Double] = [1, 2, 3, 4]
let powersArray = array.enumerate().map() {
pow($0.element, Double($0.index))
}
print("array == \(array)")
print("powersArray == \(powersArray)")
// array == [1.0, 2.0, 3.0, 4.0]
// powersArray == [1.0, 2.0, 9.0, 64.0] <- As expected
अब, अगर मैं सरणी से कुछ उप अनुक्रम का उपयोग करना चाहते, मैं एक slice
इस्तेमाल कर सकते हैं, और यह के रूप में मैं मूल सरणी में प्रयोग करेंगे मुझे सिर्फ एक ही सूचकांक का उपयोग करने की अनुमति होगी (जो मैं चाहता हूं कि अगर मैं एक्सेसर for
लूप में उपयोग करता हूं तो मैं वही चाहता हूं। उदा .:
let range = 1..<(array.count - 1)
let slice = array[range]
var powersSlice = [Double]()
for index in slice.indices {
powersSlice.append(pow(slice[index], Double(index)))
}
print("powersSlice == \(powersSlice)")
// powersSlice == [2.0, 9.0] <- As expected
हालांकि, मैं जैसे मैं मूल सरणी के साथ किया था enumerate().map()
दृष्टिकोण का उपयोग करने तो मैं पूरी तरह से अलग व्यवहार पाने की कोशिश करनी चाहिए,। slice
के सूचकांकों की सीमा के बजाय मैं एक नया, 0-आधारित रेंज मिलेगा:
let powersSliceEnumerate = slice.enumerate().map() {
pow($0.element, Double($0.index))
}
print("powersSliceEnumerate == \(powersSliceEnumerate)")
// powersSliceEnumerate == [1.0, 3.0] <- Not as expected
प्रश्न वहाँ एक सभ्य तरीका है कि क्या है (यानी मैनुअल ऑफसेट, या कुछ का उपयोग कर समायोजन के बिना) का उपयोग कर एक टुकड़ा की गणना करने में अपने स्वयं के सूचकांक और स्वत: जेनरेट 0-आधारित वाले नहीं?
अपने प्रश्न का उत्तर है, लेकिन आप 'जाने powersSlice = टुकड़ा के साथ के लिए लूप की जगह ले सकता .indices.map {पाउ (टुकड़ा [$ 0], डबल ($ 0))} ' –
धन्यवाद, @MartinR। मैं आपके सुझाव को 'एन्युमरेट' जेनरेटेड इंडेक्स रेंज को ऑफ़सेट करने से बेहतर कामकाज के रूप में दिमाग में रखूंगा। – courteouselk