Swift编程 - 字典迭代

时间:2015-03-02 06:54:13

标签: swift nsdictionary

我目前正在阅读苹果提供的快速书籍,并想知道如何找出以下代码中最大的数字...我已经发现现在我需要的最大数字是什么“添加另一个变量来跟踪哪个数字最大,以及最大数字是什么。“

 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

2 个答案:

答案 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 }