![](/img/trans.png)
[英]Iterate Dictionary with dictionary data and add it to an array in swift
[英]Swift: How to add dictionary arrays to an array?
我可以在数组中添加字典数组(这是保存多个值的字典键的正确术语吗?)吗?
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)?])”的参数列表调用'extend'。
如何相应地将字典[“1”],[“2”]和[“3”]添加到数组中?
您的数组类型声明不正确。 请尝试下面的一个
var array: [[String:[String]] = []
如果你想要一个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 }
如果您对订单不感兴趣,可以尝试:
array.extend(flatMap(dictionary.values, {$0}))
如果顺序很重要,您可以先构建optionalArrays :
let optionalArrays = [dictionary["1"], dictionary["2"], dictionary["3"]]
array.extend(flatMap(optionalArrays, {$0 ?? []}))
即你的字典返回一个可选数组,这会导致你报告的错误。
希望这可以帮助
您的array
变量必须是带有String
元素的Array
Array
。 另外,不要忘记通过添加来解开字典的值!
。
尝试这个:
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"]!])
字典值作为optionals
返回(从而指示键是否存在值),因此请使用'!'
解开每个字典数组的值(即[dictionary["1"]!
)
并且正如其他答案中所建议的那样,更改您的数组类型,因为它当前定义为字符串数组而不是字典数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.