在Swift中向数组添加元素

Fel*_*len 321 arrays ios swift

假设我有一个数组,例如:

var myArray = ["Steve", "Bill", "Linus", "Bret"]
Run Code Online (Sandbox Code Playgroud)

后来我想将一个元素推送/附加到所述数组的末尾,以获得:

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

我应该使用什么方法?

那么我想在数组的前面添加一个元素呢?有不变的时间吗?

Mic*_*lum 576

Swift 3/4开始,这可以通过以下方式完成.

将新元素添加到Array的末尾.

anArray.append("This String")
Run Code Online (Sandbox Code Playgroud)

要将不同的Array附加到Array的末尾.

anArray += ["Moar", "Strings"]
anArray.append(contentsOf: ["Moar", "Strings"])
Run Code Online (Sandbox Code Playgroud)

要在元素中插入新元素.

anArray.insert("This String", at: 0)
Run Code Online (Sandbox Code Playgroud)

将不同Array的内容插入Array中.

anArray.insert(contentsOf: ["Moar", "Strings"], at: 0)
Run Code Online (Sandbox Code Playgroud)

更多信息可以在" Swift编程语言 " 的"集合类型"一章中找到,从第110页开始.

  • anArray + ="Foo"不再适用于xCode 6 beta 5 (11认同)
  • 好答案。苹果实施此方法的不一致令人不快。大概是,** anArray + =“ Foo” **与** anArray + = [“ Foo”] **做同样的事情,就我个人而言,我只会使用后一种语法以避免混淆自己。 (2认同)

小智 18

如果需要,您还可以传入变量和/或对象.

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)
Run Code Online (Sandbox Code Playgroud)

要将它们添加到前面:

//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)
Run Code Online (Sandbox Code Playgroud)

正如其他人已经说过的那样,你不能再使用xCode 6.1中的'+ ='了

  • 有道理,缺少`.prepend()`函数,插入头部似乎是一个很好的方法 (2认同)

ric*_*ter 16

要添加到最后,请使用+=运算符:

myArray += ["Craig"]
myArray += ["Jony", "Eddy"]
Run Code Online (Sandbox Code Playgroud)

该运算符通常等同于该append(contentsOf:)方法.(在非常古老的Swift版本中,可以附加单个元素,而不仅仅是相同元素类型的其他集合.)

insert(_:at:)可以插入任何索引.

例如,如果您想在开头插入便利功能,可以将其添加到Array具有扩展名的类中.


Aqi*_*taz 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
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

var list = [AnyObject]()
list += "hello" 
list += ["hello", "world!"]
var list2 = list + "anything"
Run Code Online (Sandbox Code Playgroud)


mah*_*han 7

使用双端队列代替数组

Dequeover的主要好处Array是它支持两端的高效插入和删除。

https://swift.org/blog/swift-collections/


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


Run Code Online (Sandbox Code Playgroud)

添加Tim在名称末尾

names.append("Tim")
Run Code Online (Sandbox Code Playgroud)

添加Tim 在名称的开头

names.prepend("John")
Run Code Online (Sandbox Code Playgroud)

删除名称的第一个元素

names.popFirst() // "John"
Run Code Online (Sandbox Code Playgroud)

删除名称的最后一个元素

names.popLast() // "Tim"
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您希望在数组的开头插入而不丢失第一个位置的项目,这里有一个小扩展

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


iOS*_*iOS 5

在 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
Run Code Online (Sandbox Code Playgroud)

类型1)

//To append elements at the end
array.append(stringOne)
array.append(stringThree)
Run Code Online (Sandbox Code Playgroud)

类型2)

//To add elements at specific index
array.insert(strigTwo, at: 1)
Run Code Online (Sandbox Code Playgroud)

如果你想添加两个数组

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)
Run Code Online (Sandbox Code Playgroud)