Swift 修改哈希的快捷方式

Swift 修改哈希的快捷方式,swift,hash,Swift,Hash,我想知道以下内容是否可以写得更短 var t = [String:[Int]]() if t["a"] == nil { t["a"] = [1] } else { t["a"]!.append(2) } 也就是说,如果哈希值不存在,则分配一个哈希值,然后在其他地方重新使用它 我知道我可以写一个函数,比如 func extend(inout t:[String:[Int]], key:String, n:Int) { if t[key] == nil { t[key] = [n] }

我想知道以下内容是否可以写得更短

var t = [String:[Int]]()
if t["a"] == nil { t["a"] = [1] }
else { t["a"]!.append(2) }
也就是说,如果哈希值不存在,则分配一个哈希值,然后在其他地方重新使用它

我知道我可以写一个函数,比如

func extend(inout t:[String:[Int]], key:String, n:Int) {
  if t[key] == nil { t[key] = [n] }
  else { t[key]!.append(n) }
}
但我想知道是否有更优雅的方式


编辑实际上我正在寻找函数的快捷方式,但复制/粘贴了上面具有不同init/add值的测试代码。

如果 无法调用方法:

if (t["a"]?.append(2)) == nil {
    t["a"] = [1]
}
作为通用函数的实现(在可选 字典值,而不是整个字典):

var t=[String:[Int]]()
func setOrAppend(inout数组:[T]?,初始值:T,新值:T){
如果(数组?.append(newValue))==nil{
数组=[initialValue]
}
}
println(t)/[:]
setOrAppend(&t[“a”]、1、2)
println(t)/[a:[1]]
setOrAppend(&t[“a”]、1、2)
println(t)/[a:[1,2]]

如果您试图在数组存在时追加
1
,如果数组不存在时创建
[1]
(正如您的
扩展
函数所暗示的那样),您可以像这样使用nil合并操作符
??

t["a"] = (t["a"] ?? []) + [1]
扩展示例:

var t = [String:[Int]]()

t["a"] = (t["a"] ?? []) + [1]    // t = ["a":[1]]
t["a"] = (t["a"] ?? []) + [2]    // t = ["a":[1,2]]
t["b"] = (t["b"] ?? []) + [4]    // t = ["b":[4], "a":[1,2]]

这看起来确实更好:-)最好有一些“重用”操作符,但这可能不存在。也许在未来的Swift版本中?我经常使用上面的模式。@ThomasKilian:您的初始示例创建一个值为1的数组,或附加(不同的)值2。第二个示例使用extend函数创建或追加值1。您实际需要的是哪个版本?实际上我正在寻找函数提供的内容。我只是没有完全编辑这个问题。但您的代码对这两种情况都适用。我的要求(虽然没有明确指定)是只使用一次哈希/键。我希望有一些内置的方法。你的答案和@vacawama的答案一样正确,所以我对你的两个答案都投了赞成票。答案也不错:-)但是我需要重复哈希的键,除非我使用了函数。
var t = [String:[Int]]()

t["a"] = (t["a"] ?? []) + [1]    // t = ["a":[1]]
t["a"] = (t["a"] ?? []) + [2]    // t = ["a":[1,2]]
t["b"] = (t["b"] ?? []) + [4]    // t = ["b":[4], "a":[1,2]]