在Swift中添加一个元素到数组中

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

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

然后,我想将一个元素推入/追加到数组的末尾,以获得:

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

我应该用什么方法呢?

如果我想在数组的前面中添加一个元素呢?是否存在常数时不变?

504240 次浏览

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

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

摘自《Swift编程语言》第143页:

可以通过调用数组的append方法将新项添加到数组的末尾

或者,使用加法赋值操作符(+=)将一个新项添加到数组的末尾。

摘自:苹果公司《快速编程语言》。“iBooks。https://itun.es/us/jEUH0.l

要添加到末尾,使用+=操作符:

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

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

还有insert(_:at:)用于在任意下标处插入。

例如,如果你想要一个方便的函数用于开始插入,你可以用扩展将它添加到Array类中。

你可以用

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

如果你愿意,你也可以传入一个变量和/或对象。

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 where Element: Equatable {
mutating func appendUniqueObject(object: Generator.Element) {
if contains(object) == false {
append(object)
}
}
}

要向建议append的解决方案添加操作,需要知道在很多情况下这是一个平摊常数时间操作:

复杂度:平摊O(1),除非self的存储与另一个活动数组共享;如果self没有封装一个桥接NSArray,则计数为O;否则效率不确定。

我正在寻找Swift的cons类操作符。它应该在常量时间内返回一个不可变数组,元素被固定在数组末尾,而不改变原始数组。我还没有找到这样的标准函数。如果我找到了,我会记得告诉你的!

这是一个小扩展,如果你希望插入在数组的开始,而不失去在第一个位置的项目

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

使用+=和+运算符:

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"

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

如果你想添加两个数组

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)

如果数组是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"]

这是一个非常简单的方法,问候!

在Swift 4.2中: 你可以使用

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

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

例子:students = ["Ben", "Ivy", "Jordell"]

1)添加单个元素到数组的末尾,使用append(_:)

students.append(\ "Maxime" )

2)通过将另一个数组或任何类型的序列传递给append(contentsOf:)方法,同时添加多个元素

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

3)对单个元素使用insert(_:at:)方法在数组中间添加新元素

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

4)使用insert(contentsOf:at:)从另一个集合或数组文字插入多个元素

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

我相信是Swift 5.3。

正常数组是__abc0 如果你想将"Tim"添加到数组中,那么你可以使用__abc1,所以如果你想将它添加到数组的回来,那么你可以使用myArray.append("Tim", at: 3)

使用Deque而不是Array

Deque相对于Array的主要优点是它在两端支持高效的插入和删除。

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


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




在名字后面加上“Tim”

names.append("Tim")

在名字的开头加上“Tim”

names.prepend("John")

删除names的第一个元素

names.popFirst() // "John"

删除names的最后一个元素

names.popLast() // "Tim"