Dictionary 用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

对于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
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) 
}