如何通过在swift中使用函数的参数将元组值转换为字典

时间:2017-11-03 17:36:48

标签: arrays swift dictionary tuples swift-playground

我的目标是使用游乐场并显示每月温度(例如,1月高温为30,低温为-2)并且需要使用字符串数组以及具有温度元组值的字典

到目前为止,我有一个字符串数组Months: [String],里面有几个月。以及Temperatures: [String, (temp1: Int, temp2: Int)的字典。我有一个函数SetMonthlyTemp(month: String, temp1: Int, temp2: Int),我试图用来设置字典,但我无法弄清楚如何这样做。我对词典完全不熟悉,上周只使用了一个元组,这是一个独立的属性。有关设置此字典以获取元组(Int, Int)的任何帮助都会很棒!显然会有一个显示方法打印结果,但我没有找到相关信息。

2 个答案:

答案 0 :(得分:0)

享受:

var temperatures = [String: (Int, Int)]()
temperatures["Jan"] = (10, 20)
temperatures["Feb"] = (-1, -16)
// setting temp 1 for January (note: "Jan" entry must exist in dictionary)
temperatures["Jan"]?.0 = 30

// setter ;)
func setMonthlyTemp(month: String, temp1: Int, temp2: Int) {
    temperatures[month] = (temp1, temp2)
}

访问:

temperatures["Feb"]      // whole tuple for February
temperatures["Jan"]?.0   // first temperature for January
temperatures["Feb"]?.1   // second temperature for February

答案 1 :(得分:0)

从我的角度来看,如果您正在使用受约束的数据集,例如月,周,类别的东西,我不知道那么最好使用枚举,这将更好地描述你的数据元组和&串

enum Month {
  case january
  case february
//  ...
  case november
  case december

  static let allMonths = [january, february, /*...*/ november, december]
}

struct MonthlyTemperature {
  let month: Month
  var lowestTemp: Double?
  var highestTemp: Double?

  init(month: Month, lowest: Double? = nil, highest: Double? = nil) {
    self.month = month
    self.lowestTemp = lowest
    self.highestTemp = highest
  }
}

let temparatures = [MonthlyTemperature]()
// ...
var dict = Dictionary(grouping: temparatures, by: { $0.month })

Month.allMonths.forEach { month in
  dict.updateValue(dict[month] ?? [], forKey: month)
}