假设我有一个数组,例如:
var myArray = ["Steve", "Bill", "Linus", "Bret"]
然后,我想将一个元素推入/追加到数组的末尾,以获得:
["Steve", "Bill", "Linus", "Bret", "Tim"]
我应该用什么方法呢?
如果我想在数组的前面添加一个元素呢?是否存在常数时不变?
假设我有一个数组,例如:
var myArray = ["Steve", "Bill", "Linus", "Bret"]
然后,我想将一个元素推入/追加到数组的末尾,以获得:
["Steve", "Bill", "Linus", "Bret", "Tim"]
我应该用什么方法呢?
如果我想在数组的前面添加一个元素呢?是否存在常数时不变?
当前回答
使用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"
其他回答
这是一个小扩展,如果你希望插入在数组的开始,而不失去在第一个位置的项目
extension Array{
mutating func appendAtBeginning(newItem : Element){
let copy = self
self = []
self.append(newItem)
self.appendContentsOf(copy)
}
}
在Swift 4.2中: 你可以使用
myArray.append("Tim") //To add "Tim" into array
or
myArray.insert("Tim", at: 0) //Change 0 with specific location
我相信是Swift 5.3。
普通数组wasvar myArray = ["Steve", "Bill", "Linus", "Bret"] 并且你想将“Tim”添加到数组中,那么你可以使用myArray。insert("Tim", at=*index*),所以如果你想把它添加到数组的后面,那么你可以使用myArray。append(“Tim”,at: 3)
如果想追加唯一对象,可以展开数组结构
extension Array where Element: Equatable {
mutating func appendUniqueObject(object: Generator.Element) {
if contains(object) == false {
append(object)
}
}
}
如果你愿意,你也可以传入一个变量和/或对象。
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开始,你不能再使用'+='