我可以在数组中添加字典数组(这是保存多个值的字典键的正确术语吗?)?
var dictionary = [String: [String]]()
var array = [String]()
var data1:String = "55a"
var data2:String = "95a"
var data3:String = "66"
var data4:String = "25"
var data5:String = "88b"
var data6:String = "#"
dictionary["3"] = [data1, data2, data3, data4, data5, data6]
var data7:String = "#"
var data8:String = "#"
var data9:String = "#"
var data10:String = "#"
var data11:String = "#"
var data12:String = "#"
dictionary["2"] = [data7, data8, data9, data10, data11, data12]
var data13:String = "100"
var data14:String = "101"
var data15:String = "102"
var data16:String = "103"
var data17:String = "104"
var data18:String = "105"
dictionary["1"] = [data13, data14, data15, data16, data17, data18]
我试过了:
array.extend([dictionary["1"], dictionary["2"], dictionary["3"]])
但是出现了错误"无法调用'延伸'使用类型'([[(String)?])" ..
的参数列表如何添加词典[" 1"],[" 2"]& [" 3"]因此进入阵列?
答案 0 :(得分:5)
您的数组类型声明不正确。请尝试以下
var array: [[String:[String]] = []
答案 1 :(得分:3)
如果你想要一个Strings
的数组数组,你需要将数组的类型改为[[String]]
,正如其他答案所说的那样。
但是,从字典中获取值时,不应该强行打开包装!它可能适用于这个例子,但将来你可能会遇到麻烦:
'致命错误:在打开Optional时意外发现nil 值'
您应该使用可选绑定检查该键的字典中是否存在值,例如:
if let value = dictionary["1"] {
array.append(value)
}
// ...
或者,您可以将字典中的所有值都添加到数组中,如下所示:
let array = Array(dictionary.values)
如果您确实想要一个String
数组,可以使用flatMap
:
let array = flatMap(dictionary.values) { $0 }
答案 2 :(得分:3)
如果您对订单不感兴趣,可以尝试:
array.extend(flatMap(dictionary.values, {$0}))
如果订单很重要,您可以先构建 optionalArrays :
let optionalArrays = [dictionary["1"], dictionary["2"], dictionary["3"]]
array.extend(flatMap(optionalArrays, {$0 ?? []}))
即。你的字典返回一个可选数组,这会导致你报告的错误。
希望这有帮助
答案 3 :(得分:2)
您的array
变量必须是Array
Array
个String
元素。
另外,不要忘记通过添加!
来展开字典的值。
试试这个:
var dictionary = [String: [String]]()
var array = [[String]]()
var data1:String = "55a"
var data2:String = "95a"
var data3:String = "66"
var data4:String = "25"
var data5:String = "88b"
var data6:String = "#"
dictionary["3"] = [data1, data2, data3, data4, data5, data6]
var data7:String = "#"
var data8:String = "#"
var data9:String = "#"
var data10:String = "#"
var data11:String = "#"
var data12:String = "#"
dictionary["2"] = [data7, data8, data9, data10, data11, data12]
var data13:String = "100"
var data14:String = "101"
var data15:String = "102"
var data16:String = "103"
var data17:String = "104"
var data18:String = "105"
dictionary["1"] = [data13, data14, data15, data16, data17, data18]
array.extend([dictionary["1"]!, dictionary["2"]!, dictionary["3"]!])
答案 4 :(得分:1)
字典值返回为optionals
(从而指示键是否存在值),因此使用'!'
打开每个字典数组的值(即[dictionary["1"]!
)
正如其他答案中所建议的那样,更改您的数组类型,因为它当前定义为字符串数组而不是字典数组。