For Apple in Apple Swift

时间:2014-06-05 12:45:24

标签: for-loop dictionary swift

Apple新发布的语言Swift在official documentation上有一个例子。示例是这样的;

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

这很简单,但作为额外的练习,它需要添加另一个变量才能返回最大数字的类型(例如Square就是这里)

但是,我似乎无法弄清楚这里的“(种类,数字)”代表什么,我应该如何让我的for循环遍历所有Dictionary(interestingNumbers)键并找到哪个键的编号最大

提前感谢大家的帮助

5 个答案:

答案 0 :(得分:17)

Swift允许您使用 tuple-syntax (key, value)循环遍历字典。因此,在for循环的每次迭代中,Swift都会关注将指定的元组变量(在您的情况下为kindnumber)重新分配给实际的字典记录。

要确定哪个Key包含示例中的最高编号,您可以按如下方式扩展代码:

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 largestKey = ""
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
            largestKey = kind
        }
    }
}
largest     // =25
largestKey  // ="Square"

或者,如果您想练习元组语法,请尝试(具有相同的结果):

var largest = 0
var largestKey = ""
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            (largestKey, largest) = (kind, number)
        }
    }
}
largest     // =25
largestKey  // ="Square"

答案 1 :(得分:1)

  

我似乎无法弄清楚什么是“(种类,数字)”这里代表

它是包含数字类型的键值对(元组)。这种语法称为分解,基本上,在循环内部,您可以访问kind作为类型,numbers作为映射它的数字。

例如,在某些迭代中:

kind  // "Prime"
numbers // [2, 3, 5, 7, 11, 13]

引用指南:

  

您还可以遍历字典以访问其键值对。当迭代字典时,字典中的每个项都作为(键,值)元组返回,并且您可以将(键,值)元组的成员分解为明确命名的常量,以便在for-in循环的主体中使用。

答案 2 :(得分:1)

for (kind, numbers) in interestingNumbers{}

这个for循环实际上枚举了字典interestingNumbers的键/值对。其中kind ,而数字是对应的

kind:Prime       //Key
numbers: [2, 3, 5, 7, 11, 13] //Value  

这里是练习的完整解决方案

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 type: String = ""
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
            type = kind
        }
    }
}
largest
type

答案 3 :(得分:1)

  

然而,我似乎无法弄清楚什么是“(种类,数字)”这里代表

循环遍历字典,每次迭代都会为您提供密钥和关联值。这里称为kind(键)和numbers(值)。您可以选择任何您想要的名称。

  

如何让我的for循环遍历所有Dictionary(interestingNumbers)键并找到哪个键的编号最大。

您可以在kind循环变量中依次获取每个键。

找到导致新largest的结果后,您可以将其分配给结果变量,例如largestKind

在循环结束时,largestKind将包含数字最大的数组的键(该数字是您已有的largest)。

答案 4 :(得分: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
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
largest

这将返回我们在Our Dictionary中的一对(String,Int) 类似于函数返回多个值,如下所示,

   func refreshWebPage() -> (status:String,code:Int){
    //refresh logic
                return ("Success",200)
    }