Tambahkan elemen ke array di Swift

340

Misalkan saya memiliki sebuah array, misalnya:

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

Dan kemudian saya ingin mendorong / menambahkan elemen ke akhir array tersebut, untuk mendapatkan:

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

Metode apa yang harus saya gunakan?

Dan bagaimana dengan kasus di mana saya ingin menambahkan elemen ke bagian depan array? Apakah ada waktu terus-menerus berubah?

Fela Winkelmolen
sumber
95
Steve Jobs, Bill Gates, Linus Torvalds, tetapi siapa Bret? - Saya merasa saya harus tahu (dan saya mungkin akan menendang diri saya sendiri ketika saya tahu!)
Jimmery
23
Bret Victor? khawatirdream.com
onekiloparsec
19
Bret Victor benar. Karyanya dikatakan telah menjadi inspirasi bagi bagian-bagian yang cepat
Fela Winkelmolen
3
ingatlah bahwa Anda tidak dapat menggunakan subskrip untuk menambahkan elemen ke dalam indeks baru . subskripsi hanya digunakan untuk memperbarui nilai atau membaca dari indeks yang ada . Jadi, jika Anda memilikinya, let array = [Int]()Anda tidak akan pernah bisa mengatakan array[0] = 42Ini akan memberikan indeks di luar rentang kesalahan. Anda harus menggunakan array.append(42). Mengapa Anda tidak bisa berlangganan? Untuk alasan yang sama Anda tidak dapat melakukan letters[3] = duntuk let letters = [a,b,c]. Indeks ke-3 tidak ada seperti halnya array [0] sebelum nilai!
Sayang
4
Jangan mengajari dia cara melakukan ini. Tim seharusnya tidak diperbolehkan dalam array ini, ini merupakan penghinaan bagi yang lain ....
Otziii

Jawaban:

604

Pada Swift 3/4/5 , ini dilakukan sebagai berikut.

Untuk menambahkan elemen baru ke akhir Array.

anArray.append("This String")

Untuk menambahkan Array yang berbeda ke akhir Array Anda.

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

Untuk memasukkan elemen baru ke dalam Array Anda.

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

Untuk menyisipkan konten Array yang berbeda ke dalam Array Anda.

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

Informasi lebih lanjut dapat ditemukan di bab "Jenis Koleksi" pada " Bahasa Pemrograman Swift ", mulai dari halaman 110.

Mick MacCallum
sumber
2
Jawaban yang bagus Ketidakkonsistenan cara Apple menerapkan ini agak menjengkelkan. Agaknya, anArray + = "Foo" melakukan hal yang sama dengan anArray + = ["Foo"] Secara pribadi, saya hanya akan menggunakan sintaks yang terakhir untuk menghindari membingungkan diri saya sendiri.
original_username
11
anArray + = "Foo" tidak berfungsi lagi dari xCode 6 beta 5
Amitay
Bisakah Anda membuat daftar metode dan fungsi untuk membuat dan mengisi array juga ?? : D
1
Gagal saat dijalankan. Sudah ada elemen dalam array yang saya coba masukkan, jadi bukan itu. Solusi saya adalah membuat array baru dengan elemen yang saya coba masukkan, dan kemudian menambahkan semua elemen dari array asli. Cukup yakin ini adalah hasil dari masalah tetap di tempat lain - entah bagaimana benda-benda ini baik-baik saja selama masih ada di tempat array asli mereka, tetapi jika iOS mencoba untuk memindahkannya (sebagai hasil dari penyisipan) ada crash. Atau yang lain ini adalah masalah Swift / IB yang aneh.
MusiGenesis
1
spliceganti nama menjadi insertContentsOfdi Swift 2.
Almas Sapargali
21

Anda juga dapat mengirimkan variabel dan / atau objek jika Anda mau.

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)

Untuk menambahkannya ke depan:

//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)

Seperti yang telah dinyatakan orang lain, Anda tidak dapat lagi menggunakan '+ =' pada xCode 6.1

steveq88
sumber
2
Masuk akal, dengan kurangnya .prepend()fungsi, memasukkan di kepala tampaknya menjadi pendekatan yang baik
Atticus
1
Sangat jelas Anda masih bisa menggunakan + = tetapi tidak untuk satu elemen.
Leo Dabus
17

Untuk menambahkan sampai akhir, gunakan +=operator:

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

Operator itu umumnya setara dengan append(contentsOf:)metode. (Dan dalam versi Swift yang sangat lama, dapat menambahkan elemen tunggal, bukan hanya koleksi lain dari tipe elemen yang sama.)

Ada juga insert(_:at:)untuk memasukkan indeks apa pun.

Jika, katakanlah, Anda menginginkan fungsi kenyamanan untuk memasukkan di awal, Anda bisa menambahkannya ke Arraykelas dengan ekstensi .

rickster
sumber
Jika myArraybertipe Array, maka baris pertama salah. The +=Operator hanya dapat digunakan jika kedua myArraydan operan kanan adalah tipe Array.
Bart Jacobs
1
Sudah benar kembali ketika saya mengirim jawaban ini, tetapi bahasa telah berubah sejak saat itu. Jawaban diperbarui.
rickster
Mengatakan itu +=dan appendsetara adalah tidak benar, yang pertama melibatkan pembuatan array sementara yang akan dibuang segera setelah fungsi operator mengkonsumsinya.
Cristik
10

Gunakan + = dan + operator:

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
}

lalu gunakan:

var list = [AnyObject]()
list += "hello" 
list += ["hello", "world!"]
var list2 = list + "anything"
Aqib Mumtaz
sumber
Dalam fungsi kedua, tidak perlu mengulangi array kiri. Melakukan var copy = leftdan menambahkan copy.append(right)sudah cukup. Di Swift, array adalah tipe nilai, bukan tipe referensi.
Natan R.
4

Ini adalah ekstensi kecil jika Anda ingin memasukkan di awal array tanpa kehilangan item di posisi pertama

extension Array{
    mutating func appendAtBeginning(newItem : Element){
        let copy = self
        self = []
        self.append(newItem)
        self.appendContentsOf(copy)
    }
}
Sebastian Ustinelli
sumber
Kesalahan: Nilai jenis 'Array <Element>' tidak memiliki anggota 'appendContentsOf'
Dani Kemper
3

Dalam Swift 4.1 dan Xcode 9.4.1

Kita dapat menambahkan objek ke Array pada dasarnya dalam Dua cara

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

Tipe 1)

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

Tipe 2)

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

Jika Anda ingin menambahkan dua array

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)
iOS
sumber
2

Dari halaman 143 dari Bahasa Pemrograman Swift:

Anda dapat menambahkan item baru ke akhir array dengan memanggil metode append array

Atau, tambahkan item baru ke akhir array dengan operator penugasan tambahan (+ =)

Kutipan dari: Apple Inc. “Bahasa Pemrograman Swift.” iBooks. https://itun.es/us/jEUH0.l

aglasser
sumber
2

Untuk menambah solusi yang disarankanappend , penting untuk mengetahui bahwa ini adalah operasi waktu konstan diamortisasi dalam banyak kasus:

Kompleksitas: Amortisasi O (1) kecuali penyimpanan sendiri dibagikan dengan array langsung lainnya; O (hitung) jika diri tidak membungkus NSArray dijembatani; kalau tidak, efisiensinya tidak ditentukan.

Saya mencari consoperator sejenis untuk Swift. Itu harus mengembalikan array tidak berubah baru dengan elemen ditempelkan di ujung, dalam waktu yang konstan, tanpa mengubah array asli. Saya belum menemukan fungsi standar yang melakukan ini. Saya akan mencoba mengingat untuk melaporkan kembali jika saya menemukannya!

Benjohn
sumber
1

Anda bisa menggunakannya

Myarray.insert("Data #\(index)", atIndex: index)
ANIL.MUNDURU
sumber
1

Jika Anda ingin menambahkan objek unik, Anda dapat memperluas struct Array

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

Jika array adalah NSArray, Anda dapat menggunakan addingfungsi untuk menambahkan objek apa pun di akhir array, seperti ini:

Cepat 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)

Hasil :

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

Itu cara yang sangat sederhana, salam!

Radames E. Hernandez
sumber
1

Di Swift 4.2: Anda bisa menggunakan

myArray.append("Tim") //To add "Tim" into array

atau

myArray.insert("Tim", at: 0) //Change 0 with specific location 
Ridho Octanio
sumber
0

Contoh: siswa = ["Ben", "Ivy", "Jordell"]

1) Untuk menambahkan elemen tunggal ke akhir array, gunakan append (_ :)

students.append(\ "Maxime" )

2) Tambahkan beberapa elemen secara bersamaan dengan mengirimkan array lain atau urutan apa pun ke append (metode contentOf :)

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

3) Untuk menambahkan elemen baru di tengah array dengan menggunakan metode insert (_: at :) untuk elemen tunggal

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

4) Menggunakan sisipan (contentOf: at :) untuk menyisipkan beberapa elemen dari koleksi lain atau array literal

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

PatelFab
sumber