Swift:如何将字典数组添加到数组中?

时间:2015-05-25 08:22:59

标签: ios arrays swift dictionary

我可以在数组中添加字典数组(这是保存多个值的字典键的正确术语吗?)?

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"]因此进入阵列?

5 个答案:

答案 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 ArrayString元素。 另外,不要忘记通过添加!来展开字典的值。

试试这个:

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"]!

正如其他答案中所建议的那样,更改您的数组类型,因为它当前定义为字符串数组而不是字典数组。