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