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

Arrays 检查字典的嵌套数组中的每个值,arrays,string,swift,dictionary,Arrays,String,Swift,Dictionary,我知道这个问题对一些人来说可能很明显,但我无法找到一个合适的解决方案 我有一本字典 someDict = [String : [Int]] 还有一个整数变量和一个字符串 var someNumber = Int() var someString = String() 我的目标是比较someString=someDict key,如果是,则比较嵌套数组中的每个Int值与someNumber(检查它是小还是大,并给出一些输出) 谢谢大家! 试试这个: var someDict = [String

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

我有一本字典

someDict = [String : [Int]]
还有一个整数变量和一个字符串

var someNumber = Int()
var someString = String()
我的目标是比较
someString=someDict key
,如果是,则比较嵌套数组中的每个Int值与
someNumber
(检查它是小还是大,并给出一些输出)

谢谢大家!

试试这个:

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")
    }
}

首先,您在字典中查找与您要查找的键匹配的键,因此我们循环遍历所有键

然后,一旦找到匹配项,我们循环遍历该键值的所有内容。在本例中,它是我们的数字数组

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
    }
}

在操场上试试。

你只需向字典索要你感兴趣的钥匙,并在相应的对象中列举:

// this helps us get rid of having to unwrap someDict["someString"] first 
for intVal in someDict["someString"] ?? [Int]() {
    print(intVal < someNumber ? "smaller" : "not smaller")
}

您可以使用可选链接,而无需显式循环字典条目

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. */

如果我们处理的是一个巨大的字典,循环所有字典条目有点违背字典哈希值查找的目的(即,仅尝试直接访问密钥)。

请注意,如果我们处理的是一个巨大的字典,这种方式违背了字典哈希值查找的目的(当我们可以尝试直接访问密钥时,循环遍历所有字典条目)。你完全正确,我实际上更喜欢你的解决方案。更干净、更快。请注意,你不需要在上面的nil合并部分中明确说明空数组的类型(
someDict[someString]??[…
也可以正常工作)。或者对不存在的键(
让smallerNumbers=someDict[someString]?)使用可选的
nil
返回链接。筛选器({$0
)。@dfri,是的,您是对的,编译器可以在这种情况下推断出适当的类型
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. */