假设我有一个字典接受字符串作为键,数组接受值:
var d = [String: [Int]]()
d["k"] = [Int]()
现在我想append()
到["k"]
下的数组。我该怎么做?
[Int](d["k"]).append(1) // error
(d["k"] as [Int]).append(1) // error
我想这是非常基本的东西,但我无法理解......非常感谢!
答案 0 :(得分:3)
因为Dictionary和Array都是结构类型,所以你不能在适当的位置修改数组,而是必须提取和恢复它:
if var items = d["k"] {
items.append(1)
d["k"] = items
}
else {
d["k"] = [1]
}
答案 1 :(得分:2)
如果该键的元素存在,您只需执行以下操作:
d["k"]?.append(1)
请注意,如果"k"
键不存在任何元素,则不会发生任何事情。如果你想确保该键实际上有一个数组,只需在追加之前添加:
if d["k"] == nil {
d["k"] = []
}
答案 2 :(得分:1)
像这样:
var d = [String: [Int]]()
d["k"] = [Int]()
if var items = d["k"] {
items.append(1)
d["k"] = items
}
你必须:
var
参考 if var
行执行前三个步骤。
答案 3 :(得分:-1)
所有其他答案都是正确的,但是如果你觉得很难查看nil
,请打开...
我做了一个自定义操作符。
有了这个,您可以无条件地展开Optional
数组
infix operator +=! {
associativity right
precedence 90
assignment
}
func +=!<T, S:SequenceType where S.Generator.Element == T>(inout lhs:[T]?, rhs:S) {
if lhs == nil {
// the target is `nil`, create a new array
lhs = Array(rhs)
}
else {
// the target is not `nil`, just expand it
lhs! += rhs
}
}
用法:
var d = [String: [Int]]()
// ... d["test"] may or may not exists ...
d["test"] +=! [1]