在Swift中通过字典迭代

问题描述 投票:193回答:7

关于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

据我所知,当字典被横向移动时,最大的数字被设置为变量largest。但是,我很困惑为什么Xcode会说largest被设置5次,或1次,或3次,具体取决于每个测试。

查看代码时,我发现它应该仅在“Prime”中设置6次(2,3,5,7,11,13)。然后它应该跳过“Fibonacci”中的任何数字,因为它们都小于最大值,目前从“Prime”设置为13。然后,它应该设置为16,最后25“在”Square“中,总共产生8次。

我错过了一些完全明显的东西吗

dictionary swift
7个回答
4
投票

数组是有序集合,但字典和集合是无序集合。因此,您无法预测字典或集合中的迭代顺序。

阅读本文以了解有关Collection Types: Swift Programming Language的更多信息


2
投票

如果要迭代所有值:

dict.values.forEach { value in
    // print(value)
}

0
投票

您还可以使用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]类型的词典

© www.soinside.com 2019 - 2024. All rights reserved.