Добавление элемента в массив в Swift

Предположим у меня есть массив, например:

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

и позже я хочу нажать / добавить элемент в конец указанного массива, чтобы получить:

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

какой метод я должен использовать?

а как насчет случая, когда я хочу, чтобы добавить элемент перед массива? Существует ли постоянное время unshift?

10 ответов


по состоянию на Swift 3 / 4, это делается следующим образом.

добавить новый элемент в конец массива.

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.


чтобы добавить в конец, используйте += оператор:

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

этот оператор эквивалентен append() метод.

там же insert(:, atIndex:) для вставки по любому индексу. (См.Ссылка На Массив.)

если, скажем, вы хотите функцию удобства для вставки в начале, вы можете добавить ее в Array классе расширение.


вы также можете передать переменную и / или объект, если хотите.

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


использовать += и + операторы :

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"

вот небольшое расширение, если вы хотите вставить в начало массива без потери элемента в первой позиции

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

добавить решения, предполагая, что append, полезно знать, что это амортизированной постоянное время операции во многих случаях:

сложность: амортизированный O(1), если хранилище self не совместно с другим живым массивом; O (count), если self не обертывает мостовой NSArray; в противном случае эффективность не указана.

Я ищу cons как оператор для Swift. Он должен вернуть новая неизменяемый массив с элементом, закрепленным на конце, в постоянное время, без изменения исходного массива. Я еще не нашел стандартную функцию, которая делает это. Я постараюсь не забыть доложить, если найду его!


со страницы 143 языка программирования Swift:

вы можете добавить новый элемент в конец массива, вызвав метод добавления массива

кроме того, добавьте новый элемент в конец массива с помощью оператора присваивания сложения (+=)

Выдержка Из: Apple Inc. "Язык Программирования Swift."в iBooks. https://itun.es/us/jEUH0.l


можно использовать

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

Если вы хотите добавить уникальный объект, вы можете расширить массив структуры

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

в Swift 4.1 и Xcode 9.4.1

мы можем добавлять объекты в массив в основном двумя способами

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)