【发布时间】:2015-10-02 20:05:23
【问题描述】:
我有大量采用以下形式的数据:[四个整数的数组],{与该整数数组有关的字符串集}。例如,
[1,1,1,8],{"(1+1+1)*8"}
[1,1,2,8],{"1*(1 + 2)*8","(1 + 2)/(1/8)"}
等等
我有数千个这样的对保存在一个外部文本文件中,并且需要能够根据密钥中的四个整数来调用各个行。一种解决方案似乎是在启动时将文本文件读入字典,但字典的明显公式
let myDict2:Dictionary<Array<Int>, Array <String>> = [[1,1,1,8]: ["(1+1+1)*8"],[1,1,2,8]: ["1*(1 + 2)*8","(1 + 2)/(1/8)"]]
失败,因为“类型 'Array' 不符合协议 'Hashable'。”
但我们可以将键从整数数组转换为字符串,并尝试这样:
let myDict2:Dictionary<String, Array <String>> = ["1118": ["(1+1+1)*8"],"1128": ["1*(1 + 2)*8","(1 + 2)/(1/8)"]]
没有错误,甚至看起来我们可以提取结果
let matches2=myDict2["1128"] // correctly returns ["1*(1 + 2)*8", "(1 + 2)/(1/8)"]
但是当我们尝试使用matches2[0] 从该答案中提取一个元素时,我们得到"Cannot subscript a value of type '[String]?'"
在我的键盘上随机敲击,我得到了这个与 matches2![0] 一起工作,但我不知道为什么。
- 有什么方法可以使我的原始字典尝试 [整数数组,字符串集] 工作吗?
- 在第二个公式 [string, set of strings] 中,为什么
matches2![0]有效而matches2[0]无效? - 字典是解决此问题的合理方法,还是有其他数据结构可以更好地实现我的目标?
【问题讨论】:
标签: arrays dictionary collections swift2