使用变量作为键访问字典值:Swift

使用变量作为键访问字典值:Swift,swift,dictionary,Swift,Dictionary,我试图为字典生成一个随机元素,然后返回键和值,这样我就可以同时处理这两个元素 我来自Python背景,我认为这阻碍了我提出解决方案: myDict = ["key1" : 200.0, "key2" : 180.0] let random_key = myDict.randomElement()?.key let random_value = myDict[random_key] 我收到一条错误消息,其中指出: 无法为“[String:Double]”类型的值下标“String”类型的索引

我试图为字典生成一个随机元素,然后返回键和值,这样我就可以同时处理这两个元素

我来自Python背景,我认为这阻碍了我提出解决方案:

myDict = ["key1" : 200.0, "key2" : 180.0]

let random_key = myDict.randomElement()?.key
let random_value = myDict[random_key]
我收到一条错误消息,其中指出:

无法为“[String:Double]”类型的值下标“String”类型的索引

这样试试。可选项的错误


myDict.randomElement?.key return可选这就是为什么需要安全展开的原因,因为它可能是零到目前为止避免崩溃

几乎,您需要所有密钥的随机元素,因此

let myDict = ["key1" : 200.0, "key2" : 180.0]

let randomKey = myDict.keys.randomElement()!
let randomValue = myDict[randomKey]!
在Swift中,变量名是小写的,强制展开这两个表达式是安全的,因为所有键和值都肯定存在。

randomElement返回一个可选值,如果在您的示例中,集合是空的,则该值为零。然后通过“可选链接”获得随机_密钥,这也使其成为可选的

如果知道词典不是空的,则可以强制展开:

let myDict = ["key1" : 200.0, "key2" : 180.0]
let random_key = myDict.randomElement()!.key
let random_value = myDict[random_key]
实际上,您可以避免字典查找,因为randomElement返回一个字典元素,它是一个键/值对:

let myDict = ["key1" : 200.0, "key2" : 180.0]
let randomElement = myDict.randomElement()!
let randomKey = randomElement.key
let randomValue = randomElement.value
如果字典可能为空,则使用可选绑定:

let myDict = ["key1" : 200.0, "key2" : 180.0]
if let randomElement = myDict.randomElement() {
    let randomKey = randomElement.key
    let randomValue = randomElement.value
    // ...
} else {
    // Dictionary is empty
}

成功了!非常感谢。我还在学习这些东西,我也很感谢你在会议上帮助我。谢谢你帮我把这些东西打包。写一篇处理突发事件的文章是一个很好的实践。谢谢你解释安全展开-现在更有意义了!
let myDict = ["key1" : 200.0, "key2" : 180.0]
if let randomElement = myDict.randomElement() {
    let randomKey = randomElement.key
    let randomValue = randomElement.value
    // ...
} else {
    // Dictionary is empty
}