我对 Xcode 在 Swift Programming Language Guide 中给我的这个实验的答案有点困惑:
// Use a for-in to iterate through a dictionary (experiment)
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25]
]
var largest = 0
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
largest
我知道,随着字典被横切,最大的数字被设置为变量 largest
。但是,我对为什么 Xcode 说 largest
被设置 5 次、1 次或 3 次感到困惑,具体取决于每个测试。
查看代码时,我发现仅在“Prime”中就应该设置 6 次(2、3、5、7、11、13)。然后它应该跳过“斐波那契”中的任何数字,因为这些数字都小于最大的,目前从“Prime”设置为 13。然后,它应该设置为 16,最后在“Square”中设置为 25,总共产生 8 次。
我错过了一些完全明显的东西吗?
Swift(和其他语言)中的字典没有排序。当您遍历字典时,不能保证顺序将匹配初始化顺序。在这个例子中,Swift 先于其他键处理“Square”键。您可以通过在循环中添加打印语句来看到这一点。 25 是 Square 的第 5 个元素,因此对于 Square 中的 5 个元素,最大将设置为 5 倍,然后将保持在 25。
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25]
]
var largest = 0
for (kind, numbers) in interestingNumbers {
println("kind: \(kind)")
for number in numbers {
if number > largest {
largest = number
}
}
}
largest
这打印:
种类:正方形种类:素数种类:斐波那契
let dict : [String : Any] = ["FirstName" : "Maninder" , "LastName" : "Singh" , "Address" : "Chandigarh"]
dict.forEach { print($0) }
结果将是
("FirstName", "Maninder") ("LastName", "Singh") ("Address", "Chandigarh")
这是一个用户定义的函数,用于遍历字典:
func findDic(dict: [String: String]) {
for (key, value) in dict {
print("\(key) : \(value)")
}
}
findDic(dict: ["Animal": "Lion", "Bird": "Sparrow"])
// prints…
// Animal : Lion
// Bird : Sparrow
这是该实验的替代方案(Swift 3.0)。这可以准确地告诉您哪种数字最大。
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
var whichKind: String? = nil
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
whichKind = kind
largest = number
}
}
}
print(whichKind)
print(largest)
OUTPUT:
Optional("Square")
25
如果要遍历所有值:
dict.values.forEach { value in
// print(value)
}
您还可以使用 values.makeIterator()
迭代 dict 值,如下所示:
for sb in sbItems.values.makeIterator(){
// do something with your sb item..
print(sb)
}
你也可以像这样以更快速的方式进行迭代:
sbItems.values.makeIterator().forEach{
// $0 is your dict value..
print($0)
}
sbItems
是 [String : NSManagedObject]
类型的字典
dict.forEach { key, value in }