Arrays 如何附加到Swift字典中的值数组
假设我有一个字典,它接受字符串作为键,数组作为值:Arrays 如何附加到Swift字典中的值数组,arrays,swift,dictionary,Arrays,Swift,Dictionary,假设我有一个字典,它接受字符串作为键,数组作为值: var d = [String: [Int]]() d["k"] = [Int]() 现在我想附加到[k]下的数组。我该怎么做 [Int](d["k"]).append(1) // error (d["k"] as [Int]).append(1) // error 我想这是一件很基本的事情,但我想不出来。。。非常感谢 因为Dictionary和Array都是结构类型,所以不能就地修改数组,而是必须提取并还原它: if var items
var d = [String: [Int]]()
d["k"] = [Int]()
现在我想附加到[k]下的数组。我该怎么做
[Int](d["k"]).append(1) // error
(d["k"] as [Int]).append(1) // error
我想这是一件很基本的事情,但我想不出来。。。非常感谢 因为Dictionary和Array都是结构类型,所以不能就地修改数组,而是必须提取并还原它:
if var items = d["k"] {
items.append(1)
d["k"] = items
}
else {
d["k"] = [1]
}
像这样:
var d = [String: [Int]]()
d["k"] = [Int]()
if var items = d["k"] {
items.append(1)
d["k"] = items
}
你必须:
拔出来
打开可选包装
将其分配给var引用
追加,以及
再放回去
if-var行一次完成前三个步骤。如果该键的元素存在,您只需执行以下操作:
d["k"]?.append(1)
请注意,如果k键不存在任何元素,则不会发生任何事情。如果要确保该键实际上有一个数组,只需在追加之前添加以下内容:
if d["k"] == nil {
d["k"] = []
}
所有其他答案都是正确的,但如果你觉得选择“无”很烦人,请打开包装 我做了一个自定义操作员 这样,您就可以无条件地扩展可选阵列
实际上,“编辑”,这也不起作用。。。它确实。。。这应该是一个项目!还是物品?非常感谢!是的,d[k]是可选的,因此您必须处理展开。如果您知道密钥已经存在,Antonio会在下面给出更好的答案。感谢您的解释+1.
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]