Быстрый ввод символов и строк в словарь - PullRequest
0 голосов
/ 22 февраля 2019

Как мне написать программу, которая принимает массив строк и выводит словарь с первым символом каждой строки в качестве ключа, а остальные - в качестве объектов?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Написание этого куска кода для вас, без каких-либо испытаний с вашей стороны, просто потому, что вы новичок в StackOverflow.И я вижу сообщение от StackOverflow, что «Кори Таунсенд - новый участник. Будь милым ...» Так что я просто рад приветствовать тебя и здесьэто твой код

let arr = ["car", "cat", "dog", "ball", "flower", "notebook", "fire"]

func createDictionaryFromArrayAsCoreyWants(arr:[String]) -> [String:String] {

    var dict:[String:String] = [:]
    arr.forEach({ (word:String) in

        let strKey = String(word.prefix(1))
        let startIndex: String.Index = word.index(word.startIndex, offsetBy: 1)
        let strValue = String(word[startIndex..<word.endIndex])
        dict[strKey] = strValue
        print(strKey + " : " + strValue)
    })

    return dict
}

let d = createDictionaryFromArrayAsCoreyWants(arr: arr)
print(d)

Добавление

Только что увидел комментарий к другому ответу 'Alex Bailer', так что добавили еще одну функцию для вас.Наслаждайтесь ...

func createDictionaryFromArrayAsCoreyWants(arr:[String]) -> [String:[String]] {

    var dict:[String:[String]] = [:]
    arr.forEach({ (word:String) in

        let strKey = String(word.prefix(1))
        let startIndex: String.Index = word.index(word.startIndex, offsetBy: 1)
        let strValue = String(word[startIndex..<word.endIndex])
        if let a = dict[strKey] {
            dict[strKey] = a + [strValue]
        } else {
            dict[strKey] = [strValue]
        }
        print(strKey + " : " + strValue)
    })

    return dict
}

let d = createDictionaryFromArrayAsCoreyWants(arr: arr)
print(d)

Вывод:

["d": ["og"], "n": ["otebook"], "b": ["all"], "c": ["ar", "at"], "f": ["lower", "ire"]]
0 голосов
/ 22 февраля 2019

Это то, что вы ищете?

let d = Dictionary(grouping: array, by: {$0.prefix(1)})

с массивом:

let array = ["car", "cat", "dog", "ball", "flower", "notebok", "fire"]

Он печатает:

["b": ["ball"], "f": ["flower", "fire"], "d": ["dog"], "c": ["car", "cat"], "n": ["notebok"]]

А затем удалите первыйбуква из значений:

for key in d.keys {
    let values = d[key]

    let start = String.Index(encodedOffset: 1)
    d[key] = values?.compactMap({ String($0[start...]) })
}

Вывод:

["f": ["lower", "ire"], "d": ["og"], "b": ["all"], "c": ["ar", "at"], "n": ["otebok"]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...