Array from dictionary keys in swift Array from dictionary keys in swift arrays arrays

Array from dictionary keys in swift


Swift 3 & Swift 4

componentArray = Array(dict.keys) // for DictionarycomponentArray = dict.allKeys // for NSDictionary


With Swift 3, Dictionary has a keys property. keys has the following declaration:

var keys: LazyMapCollection<Dictionary<Key, Value>, Key> { get }

A collection containing just the keys of the dictionary.

Note that LazyMapCollection that can easily be mapped to an Array with Array's init(_:) initializer.


From NSDictionary to [String]

The following iOS AppDelegate class snippet shows how to get an array of strings ([String]) using keys property from a NSDictionary:

enter image description here

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {    let string = Bundle.main.path(forResource: "Components", ofType: "plist")!    if let dict = NSDictionary(contentsOfFile: string) as? [String : Int] {        let lazyMapCollection = dict.keys                let componentArray = Array(lazyMapCollection)        print(componentArray)        // prints: ["Car", "Boat"]    }        return true}

From [String: Int] to [String]

In a more general way, the following Playground code shows how to get an array of strings ([String]) using keys property from a dictionary with string keys and integer values ([String: Int]):

let dictionary = ["Gabrielle": 49, "Bree": 32, "Susan": 12, "Lynette": 7]let lazyMapCollection = dictionary.keyslet stringArray = Array(lazyMapCollection)print(stringArray)// prints: ["Bree", "Susan", "Lynette", "Gabrielle"]

From [Int: String] to [String]

The following Playground code shows how to get an array of strings ([String]) using keys property from a dictionary with integer keys and string values ([Int: String]):

let dictionary = [49: "Gabrielle", 32: "Bree", 12: "Susan", 7: "Lynette"]let lazyMapCollection = dictionary.keys    let stringArray = Array(lazyMapCollection.map { String($0) })// let stringArray = Array(lazyMapCollection).map { String($0) } // also worksprint(stringArray)// prints: ["32", "12", "7", "49"]


Array from dictionary keys in Swift

componentArray = [String] (dict.keys)