检查字典Swift的嵌套数组中的每个值

时间:2016-01-23 10:54:44

标签: arrays string swift dictionary

我知道这个问题对某些人来说似乎很明显,但我无法找到合适的解决方案。

我有一本字典

someDict = [String : [Int]]

我还有一个Integer变量和一个字符串

var someNumber = Int()
var someString = String()

我的目标是比较if someString = someDict key和if yes - 将其嵌套数组中的每个Int值与someNumber进行比较(检查它是否更小或更大并给出一些输出)。

谢谢!

4 个答案:

答案 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})