【问题标题】: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)

标签: ios arrays swift dictionary


【解决方案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?

      【讨论】:

        猜你喜欢
        • 2017-08-11
        • 1970-01-01
        • 2016-03-11
        • 2017-01-19
        • 2017-07-21
        • 2021-08-10
        • 1970-01-01
        • 2017-10-10
        相关资源
        最近更新 更多