How to convert dictionary to array

后端 未结 5 1591
闹比i
闹比i 2020-12-28 12:06

I want to convert my dictionary to an array, by showing each [String : Int] of the dictionary as a string in the array.

For example:     



        
相关标签:
5条回答
  • 2020-12-28 12:48

    The general case for creating an array out of ONLY VALUES of a dictionary in Swift 3 is (I assume it also works in older versions of swift):

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

    Example:

    let dic = ["1":"a", "2":"b","3":"c"]
    
    let ps = Array(dic.values.map{ $0 })
    
    print("\(ps)")
    
    for p in ps {
        print("\(p)")
    }
    
    0 讨论(0)
  • 2020-12-28 12:48

    If you like concise code and prefer a functional approach, you can use the map method executed on the keys collection:

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

    or, as suggested by @vacawama:

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

    which is functionally equivalent

    0 讨论(0)
  • 2020-12-28 13:03

    With Swift 5

    var myDict:[String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]
    
    let arrayValues = myDict.values.map({$0})
    let arrayKeys = myDict.keys.map({$0})
    
    0 讨论(0)
  • 2020-12-28 13:05

    You will have to go through and construct a new array yourself from the keys and the values.

    Have a look at 's swift array documentation:

    You can add a new item to the end of an array by calling the array’s append(_:) method:

    Try this:

    var myDict:[String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]
    
    var dictArray: [String] = []
    
    for (k, v) in myDict {
        dictArray.append("\(k) \(v)")
    }
    

    Have a look at What's the cleanest way of applying map() to a dictionary in Swift? if you're using Swift 2.0:

    0 讨论(0)
  • 2020-12-28 13:07

    You can use a for loop to iterate through the dictionary key/value pairs to construct your array:

    var myDict: [String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]
    
    var arr = [String]()
    
    for (key, value) in myDict {
        arr.append("\(key) \(value)")
    }
    

    Note: Dictionaries are unordered, so the order of your array might not be what you expect.


    In Swift 2 and later, this also can be done with map:

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

    This can also be written as:

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

    which is clearer if not as short.

    0 讨论(0)
提交回复
热议问题