我希望将字典转换为数组,方法是将字典的每个[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"]
提前致谢。
答案 0 :(得分:32)
您可以使用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)" }
如果没有那么短,那就更清楚了。
答案 1 :(得分:12)
在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)")
}
答案 2 :(得分:5)
如果您喜欢简洁的代码并且更喜欢功能方法,则可以使用在密钥集合上执行的map
方法:
let array = Array(myDict.keys.map { "\($0) \(myDict[$0]!)" })
或者,正如@vacawama所建议的那样:
let array = myDict.keys.array.map { "\($0) \(myDict[$0]!)" }
功能相同
答案 3 :(得分:2)
使用Swift 5
var myDict:[String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]
let arrayValues = myDict.values.map({$0})
let arrayKeys = myDict.keys.map({$0})
答案 4 :(得分:1)
您必须自己从键和值中构建一个新数组。
查看's swift array documentation:
您可以通过调用数组将新项添加到数组的末尾 追加(_ :)方法:
试试这个:
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?: