如何将字典转换为数组
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.array
和myDict.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字符串[重复]