我的字典看起来像这样:
dict["hello"] = ["item 1"]
我希望能够为单个密钥添加多个数组。这很好用:
dict["hello"] = ["item 2"] // overwrites item 1 – how to avoid overwriting?
但是当我分配一个新数组时,前一个值显然会被覆盖 - 我们要避免这样做:
append
所以我尝试使用dict["hello"]?.append("test") // does nothing? output: ()
方法,但这会返回nil:
npm install
如何将字符串附加到Swift中某个键的数组(值)?
答案 0 :(得分:6)
......你真的不想要这个
我希望能够为单个密钥添加多个数组。
相反,我认为你想......
...将字符串添加到与给定字符串相关联的数组
换句话说,你想要从这个
开始["hello":["item 1"]]
到这个
["hello":["item 1", "item 2"]]]
让我们从您的词典开始
var dict = [String: [String]]()
dict["hello"] = ["item 1"]
现在您需要提取与hello
键
var list = dict["hello"] ?? []
向其添加字符串
list.append("item 2")
最后将更新的数组添加回字典
dict["hello"] = list
就是这样
答案 1 :(得分:4)
这是您的代码所做的
dict["hello"] = ["item 1"]
- 这会将hello
设置为["item 1"]
dict["hello"] = ["item 2"]
- 这会将hello
设置为["item 2"]
这就像一个变量,例如:
var hello = Array<String>()
hello = ["item 1"] // prints out ["item 1"]
hello = ["item 2"] // prints out ["item 2"]
这就是你的字典发生的事情。您使用新数据覆盖任何存储的数据。
附加问题。这仅在该键已存在数组时才有效。
dict["hello"]?.append("test")
这不会起作用。
但这会。
dict["hello"] = ["test 1"]
dict["hello"]?.append("test")
print(dict) // prints out ["dict":["test 1","test"]]
您需要做什么
var dict = Dictionary<String,Array<String>>()
func add(string:String,key:String) {
if var value = dict[key] {
// if an array exist, append to it
value.append(string)
dict[key] = value
} else {
// create a new array since there is nothing here
dict[key] = [string]
}
}
add(string: "test1", key: "hello")
add(string: "test2", key: "hello")
add(string: "test3", key: "hello")
print(dict) // ["hello": ["test1", "test2", "test3"]]
字典扩展
extension Dictionary where Key == String, Value == Array<String> {
mutating func append(_ string:String, key:String) {
if var value = self[key] {
// if an array exist, append to it
value.append(string)
self[key] = value
} else {
// create a new array since there is nothing here
self[key] = [string]
}
}
}
如何使用
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
var dict = Dictionary<String,Array<String>>()
dict.append("first", key: "hello")
dict.append("second", key: "hello")
dict.append("thrid", key: "hello")
dict.append("one", key: "goodbye")
dict.append("two", key: "goodbye")
print(dict) // ["hello": ["first", "second", "thrid"], "goodbye": ["one", "two"]]
}
答案 2 :(得分:1)
请尝试这件事,让我知道这是否是你需要的
import UIKit
var dict = [String: [String]]()
if var value = dict["hello"]{
value.append("Hi")
dict["hello"] = value
}else{
dict["hello"] = ["item 1"]
}
答案 3 :(得分:1)
其他人有正确的解决方案。以下是相同答案的快速简写。
var dict = [String: [String]]()
dict["hello"] = (dict["hello"] ?? []) + ["item 1"]
dict["hello"] = (dict["hello"] ?? []) + ["item 2"]
在Swift 4中,这将是
var dict = [String: [String]]()
dict["hello"] = dict["hello", default: []] + ["item 1"]
dict["hello"] = dict["hello", default: []] + ["item 2"]