假设我有一个数组,例如:
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 {
}
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"
你可以用
Myarray.insert("Data #\(index)", atIndex: index)
在Swift 4.2中: 你可以使用
myArray.append("Tim") //To add "Tim" into array
or
myArray.insert("Tim", at: 0) //Change 0 with specific location
要添加到建议append的解决方案中,知道这在许多情况下是一个平摊常数时间操作是有用的:
复杂度:平摊O(1),除非self的存储与另一个活动数组共享;如果self没有封装一个桥接NSArray,则计数为O;否则效率不确定。
我在为斯威夫特找一个像接线员那样的罪犯。它应该在常数时间内返回一个新的不可变数组,元素被钉在最后,而不改变原始数组。我还没有找到这样的标准函数。如果我找到了,我会记得告诉你的!
如果你愿意,你也可以传入一个变量和/或对象。
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开始,你不能再使用'+='