如何将字典转换为数组

Posted

技术标签:

【中文标题】如何将字典转换为数组【英文标题】:How to convert dictionary to array 【发布时间】:2015-10-28 23:47:35 【问题描述】:

我想将字典转换为数组,方法是将字典中的每个[String : Int] 显示为数组中的字符串。

例如:

var myDict: [String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]

我知道myDict.keys.arraymyDict.values.array,但我希望它们一起出现在一个数组中。这就是我的意思:

var myDictConvertedToArray = ["attack 1", "defend 5", "block 12"]

提前致谢。

【问题讨论】:

请注意,myDict.values.array 现在是 Array(myDict.values) 【参考方案1】:

使用 Swift 5

var myDict:[String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]

let arrayValues = myDict.values.map($0)
let arrayKeys = myDict.keys.map($0)

【讨论】:

【参考方案2】:

您可以使用 for 循环遍历字典键/值对来构造您的数组:

var myDict: [String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]

var arr = [String]()

for (key, value) in myDict 
    arr.append("\(key) \(value)")

注意:字典是无序的,所以你的数组的顺序可能不是你所期望的。


Swift 2 及更高版本中,这也可以通过 map 完成:

let arr = myDict.map  "\($0) \($1)" 

这也可以写成:

let arr = myDict.map  "\($0.key) \($0.value)" 

如果不是那么短,那就更清楚了。

【讨论】:

我知道它不支持将 pari 解构为 (key, value) ($0, $1) 所以我需要改用 $0.key @MichałZiobro,我刚刚在 Xcode 9.2 中使用 Swift 4 重新测试了这两个答案,它们都按说明工作。你的情况有什么不同?【参考方案3】:

在 Swift 3 中从字典的 ONLY VALUES 创建数组的一般情况是(我假设它也适用于旧版本的 swift):

let arrayFromDic = Array(dic.values.map $0 )

例子:

let dic = ["1":"a", "2":"b","3":"c"]

let ps = Array(dic.values.map $0 )

print("\(ps)")

for p in ps 
    print("\(p)")

【讨论】:

【参考方案4】:

如果你喜欢简洁的代码并且更喜欢函数式的方法,你可以使用在keys集合上执行的map方法:

let array = Array(myDict.keys.map  "\($0) \(myDict[$0]!)" )

或者,正如@vacawama 所建议的那样:

let array = myDict.keys.array.map  "\($0) \(myDict[$0]!)" 

功能相同

【讨论】:

很好,@Antonio!它也可以写成let array = myDict.keys.array.map "\($0) \(myDict[$0]!)" 。性能相同,且短了 1 个全字符。 :-)【参考方案5】:

您必须自己通过键和值构造一个新数组。

看看's swift array documentation:

您可以通过调用数组的 append(_:) 方法:

试试这个:

var myDict:[String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]

var dictArray: [String] = []

for (k, v) in myDict 
    dictArray.append("\(k) \(v)")

如果您使用的是 Swift 2.0,请查看 What's the cleanest way of applying map() to a dictionary in Swift?:

【讨论】:

以上是关于如何将字典转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在字典数组中转换 FIRDataSnapshot?斯威夫特 3

如何在没有可选值的情况下将字典数组快速转换为json字符串[重复]

如何将 Azure 流分析中的“类字典”结构转换为带有 javascript UDF 的多维数组?

如何使用列表和字典将字符串转换为二进制代码

将字典中的数组转换为数组列表

将字典值转换为数组