स्विफ्ट में समान मान के लिए किसी सरणी के सभी सदस्यों को इनिशियलाइज़ कैसे करें?


87

मेरे पास स्विफ्ट में एक बड़ी सरणी है। मैं सभी सदस्यों को एक ही मूल्य पर आरंभ करना चाहता हूं (अर्थात यह शून्य या कुछ अन्य मूल्य हो सकता है)। सबसे अच्छा तरीका क्या होगा?


2
सभी तत्वों के माध्यम से सरणी, लूप बनाएं और हर एक को सेट करें, जैसे आप किसी अन्य प्रोग्रामिंग भाषा में करेंगे।
रॉबर्ट हार्वे

19
var a = Array(count:100, repeatedValue:0)इस वैध प्रश्न का उत्तर है।
रॉड

@Rod, मैं कोशिश करूँगा कि। यदि प्रश्न फिर से खोला जाता है, तो आप इसे उत्तर के रूप में पोस्ट कर सकते हैं।
m_power

2
वेक्टर गणित का उपयोग करने की तुलना में लूपिंग कम से कम परिमाण का एक क्रम है।
--ολ15ν.λαβέ

जवाबों:


174

वास्तव में, यह स्विफ्ट के साथ काफी सरल है। जैसा कि ऐप्पल के डॉक्टर में उल्लेख किया गया है , आप एक सरणी को इस तरह से दोहराए गए मान के साथ आरंभ कर सकते हैं:

साथ वर्ष स्विफ्ट संस्करण :

var threeDoubles = [Double](count: 3, repeatedValue: 0.0)

स्विफ्ट 3.0 के बाद से :

var threeDoubles = [Double](repeating: 0.0, count: 3)

जो देगा:

[0.0, 0.0, 0.0]

16
ऐसा लगता है कि Swift3 में यह बदल गयाvar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr

मुझे पता चला है कि यह वास्तव में स्लोवू है, एक 16MB सरणी को इस तरह से साफ़ करने में सेकंड लगते हैं। सी में, memset(p, 0, 16*1024*1024)व्यावहारिक रूप से तात्कालिक है।
wcochran

@wcochran क्या आपने ऐसा करने का बेहतर तरीका खोजा?
जावदबा

@ जवादादा नोप। अभी भी आश्चर्य है कि स्विफ्ट में ऐसा करने के लिए कोई कुशल तंत्र नहीं है जब हार्डवेयर इस तेजी से कर सकता है। शायद स्रोत की जांच के लायक है।
wcochran

36

यह स्विफ्ट 3 में एक जवाब होगा:

var threeDoubles = [Double]( repeating: 0.0, count: 3 )

1
आटोसुगेस्ट स्टेट्स [डबल] (रिपीटमेंट (3.22, काउंट: 5)), फिर भी स्पष्ट रूप से टाइप करना (दोहराना, गिनती) मान्य प्रतीत होता है
अश्विन जी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.