एक तत्व को स्विफ्ट में एक सरणी में जोड़ें


340

मान लीजिए कि मेरे पास एक सरणी है, उदाहरण के लिए:

var myArray = ["Steve", "Bill", "Linus", "Bret"]

और बाद में मैं एक तत्व को प्राप्त करने के लिए, उक्त सरणी के अंत में पुश / अपेंड करना चाहता हूं:

["Steve", "Bill", "Linus", "Bret", "Tim"]

मुझे किस विधि का उपयोग करना चाहिए?

और उस मामले के बारे में क्या है जहां मैं सरणी के सामने एक तत्व जोड़ना चाहता हूं ? क्या कोई निरंतर समय है?


95
स्टीव जॉब्स, बिल गेट्स, लिनुस टोरवाल्ड्स, लेकिन ब्रेट कौन है? - मुझे ऐसा लगता है कि मुझे पता होना चाहिए (और जब मुझे पता चलेगा तो मैं खुद को लात
मारूंगा

23
विक्टर? wordream.com
onekiloparsec

19
ब्रेट विक्टर सही है। उनके काम को स्विफ्ट के कुछ हिस्सों के लिए एक प्रेरणा कहा जाता है
फेला विंकेलमॉलेन

3
मन में नंगे आप एक नए सूचकांक में एक तत्व जोड़ने के लिए कभी भी सबस्क्रिप्ट का उपयोग नहीं कर सकते । सबस्क्रिप्टिंग का उपयोग केवल मौजूदा इंडेक्स से वैल्यू अपडेट करने या पढ़ने के लिए किया जाता है । इसलिए यदि आपके पास है तो आप कभी नहीं कह सकते हैं कि यह इंडेक्स आउट ऑफ रेंज एरर देगा। आपको उपयोग करना चाहिए । आप सबस्क्रिप्ट क्यों नहीं कर सकते? इसी कारण से आप ऐसा नहीं कर सकते के लिए के लिए । मान से पहले 3 इंडेक्स गैर-मौजूद है जैसा कि ऐरे [0] है! let array = [Int]()array[0] = 42array.append(42)letters[3] = dlet letters = [a,b,c]
हनी

4
उसे ऐसा करने का तरीका मत सिखाओ। इस सरणी में टिम को अनुमति नहीं दी जानी चाहिए, इसका अपमान दूसरों के लिए ....
ओटज़िएई

जवाबों:


604

स्विफ्ट 3/4/5 के रूप में , यह निम्नानुसार किया जाता है।

एक ऐरे के अंत में एक नया तत्व जोड़ने के लिए।

anArray.append("This String")

अपने ऐरे के अंत में एक अलग ऐरे को जोड़ना।

anArray += ["Moar", "Strings"]
anArray.append(contentsOf: ["Moar", "Strings"])

अपने ऐरे में एक नया तत्व सम्मिलित करने के लिए।

anArray.insert("This String", at: 0)

अपने ऐरे में एक अलग ऐरे की सामग्री डालें।

anArray.insert(contentsOf: ["Moar", "Strings"], at: 0)

" स्विफ्ट प्रोग्रामिंग लैंग्वेज " के "संग्रह प्रकार" अध्याय में अधिक जानकारी पेज 110 पर शुरू हो सकती है।


2
बहुत बढ़िया जवाब। जिस तरह से Apple ने इसे लागू किया है उसमें विसंगति एक तरह से परेशान करने वाली है। वर्तमान में, AArray + = "Foo" एक ही चीज़ को AArray + = ["Foo"] के रूप में करता है , व्यक्तिगत रूप से, मैं केवल अपने आप को भ्रमित करने से बचने के लिए बाद वाले सिंटैक्स का उपयोग करूंगा।
original_username

11
AArray + = "फू" अब xCode 6 बीटा 5 से काम नहीं करता है
अमिताय

क्या आप विधि की सूची बना सकते हैं और एक सरणी भी बना सकते हैं और भर सकते हैं ?? : D

1
यह रन टाइम पर फेल हो रहा है। सरणी में पहले से ही तत्व हैं जो मैं सम्मिलित करने का प्रयास कर रहा हूं, इसलिए यह नहीं है। मेरा वर्कअराउंड तत्व के साथ एक नया सरणी बनाना है जिसे मैं सम्मिलित करने का प्रयास कर रहा हूं, और फिर मूल सरणी से सभी तत्वों को जोड़ रहा हूं। बहुत यकीन है कि यह कहीं और बनाए रखने की समस्या का नतीजा है - किसी तरह ये ऑब्जेक्ट ठीक हैं, जब तक कि वे अपने मूल सरणी स्पॉट में छोड़ दिए जाते हैं, लेकिन अगर आईओएस उन्हें स्थानांतरित करने का प्रयास करता है (डालने के परिणामस्वरूप) एक दुर्घटना है। या फिर यह कुछ अजीब स्विफ्ट / आईबी समस्या है।
मुसैनेसिस

1
spliceकरने के लिए नाम बदलने insertContentsOfस्विफ्ट 2 में
Almas Sapargali

21

यदि आप चाहते थे तो आप एक चर और / या वस्तु में भी गुजर सकते हैं।

var str1:String = "John"
var str2:String = "Bob"

var myArray = ["Steve", "Bill", "Linus", "Bret"]

//add to the end of the array with append
myArray.append(str1)
myArray.append(str2)

उन्हें सामने जोड़ने के लिए:

//use 'insert' instead of append
myArray.insert(str1, atIndex:0)
myArray.insert(str2, atIndex:0)

//Swift 3
myArray.insert(str1, at: 0)
myArray.insert(str2, at: 0)

जैसा कि अन्य लोग पहले ही बता चुके हैं, अब आप '+ =' का उपयोग xCode 6.1 के रूप में नहीं कर सकते


2
समझ में आता है, एक .prepend()समारोह की कमी के साथ , सिर पर डालने से एक अच्छा दृष्टिकोण प्रतीत होता है
एटिकस

1
यह बहुत स्पष्ट है कि आप अभी भी + = का उपयोग कर सकते हैं लेकिन एक भी तत्व के लिए नहीं।
सिंह डेब्यू

17

अंत में जोड़ने के लिए, +=ऑपरेटर का उपयोग करें :

myArray += ["Craig"]
myArray += ["Jony", "Eddy"]

वह ऑपरेटर आमतौर पर append(contentsOf:)विधि के बराबर होता है । (और वास्तव में पुराने स्विफ्ट संस्करणों में, एकल तत्वों को जोड़ सकता है, न कि एक ही तत्व प्रकार के अन्य संग्रह।)

भी नहीं है insert(_:at:)किसी भी सूचकांक में डालने के लिए।

अगर, कहते हैं, आप शुरुआत में सम्मिलित करने के लिए एक सुविधा समारोह चाहते हैं, तो आप इसे विस्तार केArray साथ कक्षा में जोड़ सकते हैं ।


यदि myArrayप्रकार है Array, तो पहली पंक्ति गलत है। +=अगर दोनों ऑपरेटर केवल इस्तेमाल किया जा सकता myArrayहै और सही संकार्य प्रकार के होते हैं Array
बार्ट जैकब्स

1
जब मैंने यह उत्तर पोस्ट किया था तब यह सही था, लेकिन इसके बाद से भाषा बदल गई है। उत्तर अपडेट किया गया।
रिकसर

यह कहते हुए कि +=और appendसमतुल्य सही नहीं है, पूर्व में एक अस्थायी सरणी का निर्माण शामिल है जिसे ऑपरेटर फ़ंक्शन द्वारा उपभोग किए जाने के बाद छोड़ दिया जाएगा।
क्रिस्चियन

10

+ = और + ऑपरेटरों का उपयोग करें:

extension Array {

}

func += <V> (inout left: [V], right: V) {
    left.append(right)
}

func + <V>(left: Array<V>, right: V) -> Array<V>
{
    var map = Array<V>()
    for (v) in left {
        map.append(v)
    }

    map.append(right)

    return map
}

फिर उपयोग करें:

var list = [AnyObject]()
list += "hello" 
list += ["hello", "world!"]
var list2 = list + "anything"

दूसरे फ़ंक्शन में, बाएं सरणी पर पुनरावृति करने की आवश्यकता नहीं है। करना var copy = leftऔर फिर जोड़ना copy.append(right)काफी है। स्विफ्ट में, सरणियाँ मान प्रकार हैं, संदर्भ प्रकार नहीं।
नटन आर

4

यदि आप पहले स्थान पर आइटम को खोए बिना सरणी की शुरुआत में सम्मिलित करना चाहते हैं, तो यहां एक छोटा विस्तार है

extension Array{
    mutating func appendAtBeginning(newItem : Element){
        let copy = self
        self = []
        self.append(newItem)
        self.appendContentsOf(copy)
    }
}

त्रुटि: प्रकार का मान 'ऐरे <तत्व>' का कोई सदस्य नहीं है 'appendContentsOf'
दानी केम्पर

3

स्विफ्ट 4.1 और एक्सकोड 9.4.1 में

हम मूल रूप से दो तरह से Array में ऑब्जेक्ट जोड़ सकते हैं

let stringOne = "One"
let strigTwo = "Two"
let stringThree = "Three"
var array:[String] = []//If your array is string type

श्रेणी 1)

//To append elements at the end
array.append(stringOne)
array.append(stringThree)

टाइप 2)

//To add elements at specific index
array.insert(strigTwo, at: 1)

अगर आप दो सरणियाँ जोड़ना चाहते हैं

var array1 = [1,2,3,4,5]
let array2 = [6,7,8,9]

let array3 = array1+array2
print(array3)
array1.append(contentsOf: array2)
print(array1)

2

द स्विफ्ट प्रोग्रामिंग लैंग्वेज के पेज 143 से:

आप सरणी के एपेंड विधि को कॉल करके एक सरणी के अंत में एक नया आइटम जोड़ सकते हैं

वैकल्पिक रूप से, अतिरिक्त असाइनमेंट ऑपरेटर (+ =) के साथ एक सरणी के अंत में एक नया आइटम जोड़ें

इसके अंश: Apple Inc. "स्विफ्ट प्रोग्रामिंग लैंग्वेज।" iBooks। https://itun.es/us/jEUH0.l


2

सुझावappend देने वाले समाधानों में जोड़ने के लिए , यह जानना उपयोगी है कि यह कई मामलों में एक परिशोधित स्थिर समय ऑपरेशन है:

जटिलता: Amortized O (1) जब तक स्वयं का भंडारण किसी अन्य लाइव सरणी के साथ साझा नहीं किया जाता है; ओ (गिनती) अगर स्वयं एक कठिन NSArray लपेट नहीं करता है; अन्यथा दक्षता अनिर्दिष्ट है।

मैं consस्विफ्ट के लिए एक ऑपरेटर की तरह देख रहा हूँ । मूल सरणी को बदलने के बिना, निरंतर समय में, अंत में निपटने वाले तत्व के साथ एक नया अपरिवर्तनीय सरणी वापस करना चाहिए । मैंने अभी तक एक मानक फ़ंक्शन नहीं पाया है जो ऐसा करता है। अगर मुझे एक मिल जाए तो वापस रिपोर्ट करने के लिए याद करने की कोशिश करूँगा!



1

यदि आप अद्वितीय वस्तु को जोड़ना चाहते हैं, तो आप ऐरे संरचना का विस्तार कर सकते हैं

extension Array where Element: Equatable {
    mutating func appendUniqueObject(object: Generator.Element) {
        if contains(object) == false {
            append(object)
        }
    }
}

1

यदि सरणी NSArray है तो आप सरणी addingके अंत में किसी भी ऑब्जेक्ट को जोड़ने के लिए फ़ंक्शन का उपयोग कर सकते हैं , जैसे:

स्विफ्ट 4.2

var myArray: NSArray = []
let firstElement: String = "First element"
let secondElement: String = "Second element"

// Process to add the elements to the array
myArray.adding(firstElement)
myArray.adding(secondElement)

परिणाम :

print(myArray) 
// ["First element", "Second element"]

यह एक बहुत ही सरल तरीका है, सादर!



0

उदाहरण: छात्र = ["बेन", "आइवी", "जोर्डेल"]

1) सरणी के अंत में एकल तत्व जोड़ने के लिए, परिशिष्ट का उपयोग करें (_ :)

students.append(\ "Maxime" )

2) एक ही समय में एक और सरणी या किसी भी तरह के अनुक्रम (contentOf :) विधि पारित करके कई तत्वों को जोड़ें

students.append(contentsOf: ["Shakia" , "William"])

3) एक्सरसाइज (_: at: :) एकल तत्वों के लिए विधि का उपयोग करके एक सरणी के बीच में नए तत्वों को जोड़ने के लिए

students.insert("Liam" , at:2 )

4) इन्सर्ट का उपयोग करना (contentOf: at :) एक और संग्रह या सरणी शाब्दिक से कई तत्वों को सम्मिलित करने के लिए

students.insert(['Tim','TIM' at: 2 )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.