检查字典嵌套数组中的每个值Swift
问题描述:
我知道这个问题对某些人来说似乎很明显,但我无法绕过一个合适的解决方案。检查字典嵌套数组中的每个值Swift
我有一本字典
someDict = [String : [Int]]
我也有一个整数变量和一个字符串
var someNumber = Int()
var someString = String()
我的目标是,如果someString = someDict key
比较,如果是 - 比较各int值里面的嵌套数组到someNumber
(检查它是否更小或更大,并提供一些输出)。
谢谢!
答
首先你指望匹配你后一个字典的关键 - 通过所有的键,以便我们循环。
然后,一旦我们找到一个匹配,我们遍历该键值的所有内容。在这种情况下,它是我们的数组数组。
let someDict = ["matchingString" : [6,7,5,4]]
var someNumber = 5
var someString = "matchingString"
for (someDictKey, numbers) in someDict {
if someDictKey == someString {
// Key Found
for number in numbers {
if number == someNumber {
// Number Found
} else {
// no matching number found
}
}
} else {
// No matching key found
}
}
在操场上试试吧。
答
试试这个:
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")
}
}
答
你可以简单地问字典您感兴趣插入钥匙,以及相应的对象中列举:
// 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})
答
您可以使用可选的链接,而不需要显式循环访问字典条目。
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)
哈希值查找(即,只是试图直接访问键)。
请注意,如果我们正在处理一个巨大的字典,这种类型会破坏字典散列值查找的目的(当我们只能直接尝试访问密钥时,循环遍历所有字典条目)。 – dfri
你绝对是对的,我更喜欢你的解决方案。更干净,更快。 –