我知道这个问题对某些人来说似乎很明显,但我无法找到合适的解决方案。
我有一本字典
someDict = [String : [Int]]
我还有一个Integer变量和一个字符串
var someNumber = Int()
var someString = String()
我的目标是比较if someString = someDict key
和if yes - 将其嵌套数组中的每个Int值与someNumber
进行比较(检查它是否更小或更大并给出一些输出)。
谢谢!
答案 0 :(得分:2)
首先,你要在字典中找到与你所追求的密钥相匹配的密钥 - 所以我们遍历所有密钥。
然后,一旦找到匹配项,我们就会遍历该键值的所有内容。在这种情况下,它是我们的数字数组。
{{1}}
在操场上试试。
答案 1 :(得分:2)
您可以使用可选链接,而无需显式循环字典条目。
var someDict = [String : [Int]]()
someDict["SomeString"] = [Int](1...5)
let someString = "SomeString"
let someNumber = 2
if someDict[someString]?.contains(someNumber) ?? false {
print("Dict value array for key '\(someString)' contains value \(someNumber).")
}
else {
print("Dict value array for key '\(someString)' does not contain value \(someNumber).")
}
/* Prints: Dict value array for key 'SomeString' contains value 2. */
如果我们正在处理一个庞大的字典,那么循环遍历所有字典条目就会破坏字典O(1)
哈希值查找的目的(即,只是试图直接访问密钥)。
答案 2 :(得分:1)
试试这个:
var someDict = [String : [Int]]()
someDict["a"] = [1, 2, 3]
someDict["b"] = [4, 5, 6]
var str = "a"
var number = 3
for (key, value) in someDict {
if key == str {
for num in value {
if num == number {
print("matched")
} else {
print("Oops")
}
}
} else {
print("nope")
}
}
答案 3 :(得分:1)
您可以简单地向字典询问您感兴趣的密钥,并在相应的对象中进行枚举:
// this helps us get rid of having to unwrap someDict["someString"] first
for intVal in someDict["someString"] ?? [Int]() {
print(intVal < someNumber ? "smaller" : "not smaller")
}
或者,如果您对找到小于someNumber
的数字感兴趣,可以使用过滤支持:
let smallerNumbers = (someDict[someString] ?? [Int]()).filter({$0 < someNumber})