繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM