我目前正在阅读苹果提供的快速书籍,并想知道如何找出以下代码中最大的数字...我已经发现现在我需要的最大数字是什么“添加另一个变量来跟踪哪个数字最大,以及最大数字是什么。“
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 (kinds, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
largest
答案 0 :(得分:1)
像这样:
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 kind = ""
for (kinds, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
kind = kinds
}
}
}
另外一个注意事项:如果最大数字出现不止一次(如果你将你的例子扩展到144,这是一个斐波纳契以及12 ** 2)你会说两者中只有一个是最大的。虽然这两个类别都有最高的数字。想一种将结果作为数组返回的方法。 : - )
let interestingNumbers = [
"Prime": [2,3,5,7,11,13],
"Fibonacci": [1,1,2,3,5,8,13,21,34,55,89,144],
"Square": [1,4,9,16,25,36,49,64,81,100,121,144]
]
答案 1 :(得分:1)
如果您想要一个功能实现,它可能看起来像:
let interestingNumbers = [
"Prime": [2,3,5,7,11,13],
"Fibonacci": [1,1,2,3,5,8],
"Square": [1,4,9,16,25]
]
let result = map(interestingNumbers) { ($0, maxElement($1)) }
.sorted { $0.1 < $1.1 }.last
map
获取一个元组数组,其中包含序列名称和该序列中的max元素;
sorted
显然会根据元组中的第二个元素对这些结果进行排序;和
last
抓取最后一个,即最大号码最大的序列。
或者,您可以使用reduce
查找具有最大值的元组作为其第二项:
let maxElements = map(interestingNumbers) { ($0, maxElement($1)) }
let result = maxElements.reduce(maxElements.first!) { $0.1 > $1.1 ? $0 : $1 }