Dictionary 用Swift反复浏览字典
对于Xcode在Swift编程语言指南中给我的这个实验的答案,我有点困惑:Dictionary 用Swift反复浏览字典,dictionary,swift,Dictionary,Swift,对于Xcode在Swift编程语言指南中给我的这个实验的答案,我有点困惑: // 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 f
// 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
我知道在对字典进行横向转换时,最大的数字被设置为变量,最大
。然而,我不明白为什么Xcode会说最大的
被设置了5次,或者1次,或者3次,这取决于每个测试
当查看代码时,我发现它应该单独在“Prime”中设置6次(2、3、5、7、11、13)。然后,它应该跳过“斐波那契”中的任何数字,因为这些数字都小于最大的数字,而最大的数字当前从“素数”设置为13。然后,它应该设置为16,最后在“Square”中设置为25,总共产生8次
我是否遗漏了一些显而易见的东西 Swift(和其他语言)的词典没有排序。当您遍历字典时,无法保证顺序与初始化顺序匹配。在本例中,Swift先处理“方形”键,然后再处理其他键。您可以通过向循环中添加print语句来看到这一点。25是正方形的第五个元素,所以最大值将被设置为正方形中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
这张照片是:
数组是有序集合,但字典和集合是无序集合。 因此,您无法预测字典或集合中的迭代顺序 阅读本文以了解更多信息
这是该实验的另一种选择(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
结果将是
(“名字”,“曼宁德”)
(“姓”、“辛格”)
(“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
如果要迭代所有值:
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}
您能告诉我这个例子在1000数据循环中是否更有效吗?因为我有一个这么大的JSON,所以最后需要1GB的处理。较新的设备不会崩溃,但在我的iphone 5s中,16GB会崩溃一半。这似乎有点误导,因为最初的问题是字典是否维持其顺序,然后你发布了一个示例,说明它们在不维持顺序的情况下维持其顺序。我非常讨厌这个事实,这是正确的。在愚蠢的乔达说话的创造者斯威夫特每个人都必须说话!
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)
}