如何附加到Swift字典中的值的数组

时间:2015-02-06 22:40:09

标签: arrays swift dictionary

假设我有一个字典接受字符串作为键,数组接受值:

var d = [String: [Int]]()
d["k"] = [Int]()

现在我想append()["k"]下的数组。我该怎么做?

[Int](d["k"]).append(1) // error
(d["k"] as [Int]).append(1) // error

我想这是非常基本的东西,但我无法理解......非常感谢!

4 个答案:

答案 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
}

你必须:

  1. 拉出来
  2. 打开可选
  3. 将其分配给var参考
  4. 追加,
  5. 再次把它放回去
  6. 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]