Add an element to an array in Swift

IosArraysSwiftXcodeCocoa Touch

Ios Problem Overview


Suppose I have an array, for example:

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

And later I want to push/append an element to the end of said array, to get:

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

What method should I use?

And what about the case where I want to add an element to the front of the array? Is there a constant time unshift?

Ios Solutions


Solution 1 - Ios

As of Swift 3 / 4 / 5, this is done as follows.

To add a new element to the end of an Array.

anArray.append("This String")

To append a different Array to the end of your Array.

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

To insert a new element into your Array.

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

To insert the contents of a different Array into your Array.

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

More information can be found in the "Collection Types" chapter of "The Swift Programming Language", starting on page 110.

Solution 2 - Ios

You can also pass in a variable and/or object if you wanted to.

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)

To add them to the front:

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

As others have already stated, you can no longer use '+=' as of xCode 6.1

Solution 3 - Ios

To add to the end, use the += operator:

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

That operator is generally equivalent to the append(contentsOf:) method. (And in really old Swift versions, could append single elements, not just other collections of the same element type.)

There's also insert(_:at:) for inserting at any index.

If, say, you'd like a convenience function for inserting at the beginning, you could add it to the Array class with an extension.

Solution 4 - Ios

Use += and + operators :

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
}

then use :

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

Solution 5 - Ios

Here is a small extension if you wish to insert at the beginning of the array without loosing the item at the first position

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

Solution 6 - Ios

In Swift 4.1 and Xcode 9.4.1

We can add objects to Array basically in Two ways

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

Type 1)

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

Type 2)

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

If you want to add two arrays

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)

Solution 7 - Ios

From page 143 of The Swift Programming Language:

>You can add a new item to the end of an array by calling the array’s append method > >Alternatively, add a new item to the end of an array with the addition assignment operator (+=)

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/us/jEUH0.l

Solution 8 - Ios

To add to the solutions suggesting append, it's useful to know that this is an amortised constant time operation in many cases:

> Complexity: Amortized O(1) unless self's storage is shared with another live array; O(count) if self does not wrap a bridged NSArray; otherwise the efficiency is unspecified.

I'm looking for a cons like operator for Swift. It should return a new immutable array with the element tacked on the end, in constant time, without changing the original array. I've not yet found a standard function that does this. I'll try to remember to report back if I find one!

Solution 9 - Ios

Use Deque instead of Array

> The main benefit of Deque over Array is that it supports efficient insertions and removals at both ends. > > https://swift.org/blog/swift-collections/


var names:Deque = ["Steve", "Bill", "Linus", "Bret"]


Add 'Tim' at the end of names
names.append("Tim")
Add 'Tim' at the begining of names
names.prepend("John")
Remove the first element of names
names.popFirst() // "John"
Remove the last element of names
names.popLast() // "Tim"

Solution 10 - Ios

You could use

Myarray.insert("Data #\(index)", atIndex: index)

Solution 11 - Ios

If you want to append unique object, you can expand Array struct

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

Solution 12 - Ios

If the array is NSArray you can use the adding function to add any object at the end of the array, like this:

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

Result:

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

That is a very simple way, regards!

Solution 13 - Ios

In Swift 4.2: You can use

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

or

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

Solution 14 - Ios

Example: students = ["Ben" , "Ivy" , "Jordell"]

  1. To add single elements to the end of an array, use the append(_:)

students.append(\ "Maxime" )

  1. Add multiple elements at the same time by passing another array or a sequence of any kind to the append(contentsOf:) method

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

  1. To add new elements in the middle of an array by using the insert(_:at:) method for single elements

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

  1. Using insert(contentsOf:at:) to insert multiple elements from another collection or array literal

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

Solution 15 - Ios

Swift 5.3, I believe.

The normal array wasvar myArray = ["Steve", "Bill", "Linus", "Bret"] and you want to add "Tim" to the array, then you can use myArray.insert("Tim", at=*index*)so if you want to add it at the back of the array, then you can use myArray.append("Tim", at: 3)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFelaView Question on Stackoverflow
Solution 1 - IosMick MacCallumView Answer on Stackoverflow
Solution 2 - IosSteve QuatraleView Answer on Stackoverflow
Solution 3 - IosricksterView Answer on Stackoverflow
Solution 4 - IosAqib MumtazView Answer on Stackoverflow
Solution 5 - IosSebastian UstinelliView Answer on Stackoverflow
Solution 6 - IosNareshView Answer on Stackoverflow
Solution 7 - IosaglasserView Answer on Stackoverflow
Solution 8 - IosBenjohnView Answer on Stackoverflow
Solution 9 - IosmahanView Answer on Stackoverflow
Solution 10 - IosANIL.MUNDURUView Answer on Stackoverflow
Solution 11 - IosTikhonov AleksandrView Answer on Stackoverflow
Solution 12 - IosRadames E. HernandezView Answer on Stackoverflow
Solution 13 - IosRidho OctanioView Answer on Stackoverflow
Solution 14 - IosRonak PatelView Answer on Stackoverflow
Solution 15 - IosWilliam ZengView Answer on Stackoverflow