当前位置: 首页 > 面试题库 >

在Swift中遍历字典

夹谷星河
2023-03-14
问题内容

我对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)。然后,它应该跳过“斐波那契”中的任何数字,因为这些数字都小于最大数字,该数字当前已从“
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

打印:

kind: Square
kind: Prime
kind: Fibonacci


 类似资料:
  • 本文向大家介绍Swift遍历,包括了Swift遍历的使用技巧和注意事项,需要的朋友参考一下 例子            

  • 我有一个简单的枚举,我想迭代一下。为此,我采用了顺序和迭代器协议,如下面的代码所示。顺便说一句,这可以复制/粘贴到Xcode 8中的游乐场。 但是for in循环生成错误消息“Type”节。Type不符合协议“Sequence”。协议一致性在我的扩展中;那么,这个代码有什么问题? 我知道还有其他方法可以做到这一点,但我想知道这种方法有什么问题。 谢谢

  • 问题内容: 我正在尝试在Swift操场上编写一段非常简单的代码。 但是,我总是在第3行出现错误。 “字符串”没有名为“生成器”的成员 有什么想法为什么不起作用?注意:我正在使用Swift 2.0(字符串和字符)在Xcode 7中工作。 问题答案: 从Swift 2开始,不符合。但是,您可以在使用属性。返回符合的,因此可以通过循环进行迭代: 另外,您可以添加扩展名使其符合: 虽然,我确定Apple有

  • 问题内容: 是否可以在Swift中遍历结构的属性? 我需要在使用许多不同单元格类型的视图控制器中注册单元格重用标识符(单元格组织在不同的nib文件中)。所以我的想法是将所有重用标识符和对应的nib文件作为静态元组属性(reuseID,nibName)放入结构中。但是,如何遍历所有这些元素以将单元格注册到tableView? 我已经尝试过一些东西(请参阅下面的答案)。但是有没有更简单的方法来做到这一

  • 问题内容: 说我有一个数组。如何一次迭代两个? 问题答案: 您可以使用称为stride(to :, by :)的进度循环,每n个元素对元素进行一次迭代: Xcode 8.3.2•Swift 3.1

  • 我有对象 和多阵列 例如,我如何通过数组迭代得到一个名字为" Masha "的人 预先感谢