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]