Ссылаясь на: Swift Standard Library> Словарь>map(_:)Есть ли подход к карте словарных ключей/значений одновременно в Swift?
возвраты Массив, содержащих результаты отображения данного закрытия над элементами последовательности, в.
Как уже упоминалось, мы можем сделать отображение в словарях, но выход будет массив, а не «отображается» словарь.
Честно говоря, я не уверен, что, если говорить «картирование весь словарь» является законным, но то, что я имею в виду следующее:
Считают, что мы имеем:
let myDict = ["1": "one","2": "tow","3": "three"]
и мы хотим чтобы отобразить все это! (оба ключа и значения). Вывод должен быть:
let mappedDict = ["03": "THREE", "02": "TOW", "01": "ONE"]
Предположим, что цель отображения является добавление «0» в качестве первого символа для всех ключей, и пусть все значения, чтобы быть в верхнем регистре.
Чтобы сделать его более читаемым, я отправил решение (то, что я пробовал) в качестве ответа, вместо того, чтобы упоминать его в вопросе о себе; Я думаю, что мой ответ не такой элегантный (или, по крайней мере, как я чувствую его запах кода), я отобразил ключи, значения и объединил их в словаре, каждый шаг был достигнут независимо.
Итак, что я спрашиваю о том:
Есть ли способ, чтобы сделать эту работу непосредственно в один шаг? Нечто похожее на:
Этот фрагмент кода является демонстрация того, что я спрашиваю о, код не будет работать нормально
let myDict = ["1": "one","2": "tow","3": "three"]
let mappedDict = myDict.map { key, value in
"0" + key
value.uppercased()
}
Спасибо заранее.
Почему вы не просто изменить ключи и добавить значения непосредственно в 'mappedDict' вместо так что вы можете пропустить создание' mappedKeys', '' mappedValues' и zippedArray'. – Eendje
Нет необходимости конвертировать zipped-последовательности в 'Array', вы можете перебирать их напрямую. Также почему бы просто не перебирать словарь напрямую и применять преобразования к ключам и значениям в цикле? (например, 'for (key, value) в myDict {mappedDict [" 0 "+ key] = value.uppercased()}')? – Hamish
@Eendje Я отделяю их только для того, чтобы сделать его более читабельным ... кстати, вы думаете, что весь ответ - хорошее решение? –