Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift 2 - Separating an array into a dictionary with keys from A to Z

I have an array, for instance ["Apple", "Banana", "Blueberry", "Eggplant"] and I would like to convert it to a dictionary like follows:

[
    "A" : ["Apple"],
    "B" : ["Banana", "Blueberry"],
    "C" : [],
    "D" : [],
    "E" : ["Eggplant"]
]

I am using Swift 2 on Xcode 7 beta 4. Thanks!

like image 728
Paco Wong Avatar asked Dec 02 '22 14:12

Paco Wong


2 Answers

Using only Swift 2 objects and methods, and with a key for each letter in the alphabet:

let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.map({ String($0) })

let words = ["Apple", "Banana", "Blueberry", "Eggplant"]

var result = [String:[String]]()

for letter in alphabet {
    result[letter] = []
    let matches = words.filter({ $0.hasPrefix(letter) })
    if !matches.isEmpty {
        for word in matches {
            result[letter]?.append(word)
        }
    }
}

print(result)
like image 91
Eric Aya Avatar answered Dec 07 '22 00:12

Eric Aya


I composed this in Xcode playground:

import Foundation

var myArray = ["Apple", "Banana", "Blueberry", "Eggplant"]

var myDictionary : NSMutableDictionary = NSMutableDictionary()

for eachString in myArray as [NSString] {

    let firstCharacter = eachString.substringToIndex(1)

    var arrayForCharacter = myDictionary.objectForKey(firstCharacter) as? NSMutableArray

    if arrayForCharacter == nil
    {
        arrayForCharacter = NSMutableArray()
        myDictionary.setObject(arrayForCharacter!, forKey: firstCharacter)
    }

    arrayForCharacter!.addObject(eachString)
}

for eachCharacter in myDictionary.allKeys
{
    var arrayForCharacter = myDictionary.objectForKey(eachCharacter) as! NSArray

    print("for character \(eachCharacter) the array is \(arrayForCharacter)")
}
like image 42
Michael Dautermann Avatar answered Dec 07 '22 00:12

Michael Dautermann