2016-03-02 58 views
1

我有一个关于词典词典的问题。在Dict中放置单个元素的方法比我做得更简单吗?词典字典中设置单个元素

var cellHeight = [ Int : [ Int : CGFloat ] ]() 

// ... 

if let _ = cellHeight[0] { 
    cellHeight[0]![2] = 0.0 
} else { 
    cellHeight[0] = [ 2 : 0.0 ] 
} 

在所有我检查的唯一解释如何填写/初始化全字典-的快译通,比从中读取,而不是如何通过部分填充部分的教程。

回答

1

你在做什么基本上是正确的。你可以稍微更优雅,就像这样:

let didit = cellHeight[0]?[2] = 0 // yields an Optional<Void> 
if didit == nil { // that didn't work, so create the entry 
    cellHeight[0] = [2:0] 
} 

而且可以进一步收紧,而无需额外的变量:

if nil == (cellHeight[0]?[2] = 0) { 
    cellHeight[0] = [2:0] 
} 

如果这是你的代码的重复模式,您可以当然可以将它抽象为一个函数。

2

只需添加元素。如果一个词典的输入不存在,向该键添加一个元素将创建一个。如果一个键已经存在,那么添加一个元素将会覆盖旧键。从不存在的字典键读取将返回零。从字典中读取返回一个可选项。 enter image description here

+0

不幸的是,这不起作用,因为如果已经有cellHeight [0]的子字典,它们将被替换为新字典。这就是我执行复杂结构来检查是否已经有子字典并处理它们的原因。看到这里:[截图](http://imgur.com/ZTHhAtp) – falsch