【问题标题】:How to map array to a key in dictionary in swift?如何快速将数组映射到字典中的键?
【发布时间】:2016-12-06 06:41:18
【问题描述】:

我想创建一个字典,其键为日期和事件数组。一个日期可以有多个事件,所以我想将一个日期作为字典的键映射到字符串数组。我将是动态的,日期可以没有事件或日期可以有多个事件。我从日期数组中获取数据,我需要将其与事件映射。

我试过下面的代码:

func addEventToDictionary(eventModal:CalenderEventModal,date:Date) {
    var key:String = self.dateFormatter().string(from: date)

    if let val = dict_events[key] {

    } else {
        dict_events[key]  = [Any]()
    }

    dict_events[key] = eventModal
}

这里的 Event modal 是一个 Event 对象。

【问题讨论】:

  • 你尝试了这段代码,那么你得到了什么结果,你期望什么?
  • 让你的 dict_events = [String : [CalenderEventModal]] ?
  • if let val = dict_events[key] { val.insert(eventModal) }

标签: ios arrays swift dictionary


【解决方案1】:

假设dict_events 是一个声明类型为[String: [Any]] 的字典,那么我相信你所缺少的只是附加到这个数组而不是分配它。字典的值部分是可选的,因此您需要将值附加到非可选数组,然后将其分配回字典的key。此外,如果您知道您将只存储CalenderEventModal 对象,您可以将dict_events 的类型更改为[String: [CalenderEventModal]]。您的代码的修复程序如下所示:

var dict_events: [String: [CalenderEventModal]] = [:]

func addEventToDictionary(eventModal: CalenderEventModal, date: Date) {
    var key: String = self.dateFormatter().string(from: date)

    if var val = dict_events[key] {
        val.append(eventModal)
        dict_events[key] = val
    } else {
        let events = [CalenderEventModal]()
        events.append(eventModal)
        dict_events[key] = events
    }
}

【讨论】:

  • @KevinAleman 您需要将[Any]() 更改为[CalendarEventModal]()dict_events 应该是var dict_events = [String: [CalenderEventModal]]() - 不需要可选数组;字典要么有一个键条目,要么没有
  • @dhiraj,您在使用append 时遇到了什么问题?当我们没有您的代码的预期和实际用例时,很难调试您的问题。
  • @Paulw11 你是对的;我的错别字和脑放屁。 :) 感谢您纠正我!我已经用适当的信息编辑了我的答案。
  • @diraj,这是因为字典的值部分是可选的。我用应该可以工作的解决方案编辑了我的代码。
猜你喜欢
  • 1970-01-01
  • 2018-06-04
  • 2015-10-17
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多