我正在尝试使用一个列表,该列表是一个字典键/对集合的值,而这个字典本身就是一个字典中的键/对集合的值。为了解释,这是我初始化它的方式。
var dictOfEvents = [Int: [Int: [PFObject]]]()我正在尝试将事件添加到列表中,内部字典的关键字是月份的日期,外部字典的关键字是月份。例如,5月1日的事件为:
dictOfEvents[5:[1:[ListOfEvents]]其中ListOfEvents是PFObjects的数组。在添加month功能以及外部字典之前,我添加新事件的方式是:` self.dictOfEventscomponents.day = event,但现在,当我尝试用以下命令扩展它时:
self.dictOfEvents[components.month]?[components.day]! = [event]它不起作用。任何关于如何创建新的事件列表和访问此双层字典的解释都将不胜感激。
(注意:我不知道该放在哪里!那呢?在最后一段代码中,如果我犯了错误,请原谅。)
发布于 2015-05-12 11:43:15
你可以简单地改变:
self.dictOfEvents[components.month]?[components.day]! = [event]至:
self.dictOfEvents[components.month]![components.day]! = [event]因为Dictionary有下标,所以Dictionary?没有下标。
如果您尝试将事件添加到字典。我建议使用这个:
var dictOfEvents = [Int: [Int: [PFObject]]]()
var dictOfDayEvents = [Int:[PFObject]]()
dictOfDayEvents.updateValue([PFObject()], forKey: 1)
dictOfEvents.updateValue(dictOfDayEvents, forKey: 5)发布于 2015-05-12 11:47:00
下面是我认为在你的案例中可以很好地使用optionals的方法(并且应该回答你的问题):
var dic: [Int: [Int: [String]]] = [:]
dic[5] = [1:["Hello", "World"]]
if let list = dic[5]?[1] {
// your list exist and you can safely use it
for item in list {
println(item)
}
}我只是用String代替了PFObject。
一种不同的方法可以是:
/*
Define a struct to encapsulate your Month and Day
Make it Hashable so that you can use it as Dictionary key
*/
public struct MonthDay: Hashable {
let month: Int
let day: Int
public var hashValue: Int { return month * 100 + day }
}
public func ==(lhs: MonthDay, rhs: MonthDay) -> Bool {
return lhs.month == rhs.month && lhs.day == rhs.day
}
var dictOfEvents = [MonthDay :[String]]()
let aMonthAndDay = MonthDay(month: 5, day: 1)
dictOfEvents[aMonthAndDay] = ["Hello", "World"]
if let list = dictOfEvents[aMonthAndDay] {
// your list exist and you can safely use it
for item in list {
println(item)
}
}https://stackoverflow.com/questions/30180753
复制相似问题