首页 文章

在Swift中通过字典迭代

提问于
浏览
177

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

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

5 回答

  • 0

    这是一个用户定义的函数来迭代字典:

    func findDic(dict: [String: String]){
        for (key, value) in dict{
        print("\(key) : \(value)")
      }
    }
    
    findDic(dict: ["Animal":"Lion", "Bird":"Sparrow"])
    //prints Animal : Lion 
             Bird : Sparrow
    
  • 2

    Swift(和其他语言)中的字典不是有序的 . 当您遍历字典时,没有任何保证订单将与初始化顺序匹配 . 在这个例子中,Swift在其他之前处理“Square”键 . 您可以通过向循环添加print语句来查看此内容 . 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
    

    这打印:

    种类:方形
    亲切:Prime
    种类:斐波那契

  • 9
    let dict : [String : Any] = ["FirstName" : "Maninder" , "LastName" : "Singh" , "Address" : "Chandigarh"]
    dict.forEach { print($0) }
    

    结果将是

    (“FirstName”,“Maninder”)(“LastName”,“Singh”)(“地址”,“Chandigarh”)

  • 290

    这是该实验的替代方案(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
    
  • 8

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

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

相关问题