Swift конвертирует массив в массив кортежей - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть такой массив:

[Shivam, Shiv, Shantanu, Mayank, Neeraj]

Я хочу создать массив tuples(key , value) из этого массива только с key, равным first character и value, являющимся array of strings:

Как это:

[

(**key**: S , **value**: [Shivam, Shiv, Shantanu]),

 (**key**: M , **value**: [Mayank]), 

 (**key**: N , **value**: [Neeraj])

]

PS: Это не дубликат этого поста Массив Swift для массива кортежей . Там ОП хочет объединить два массива, чтобы создать массив кортежей

1 Ответ

0 голосов
/ 15 сентября 2018
  • Шаг 1: Создайте сгруппированный словарь

    let array = ["Shivam", "Shiv", "Shantanu", "Mayank", "Neeraj"]
    let dictionary = Dictionary(grouping: array, by: {String($0.prefix(1))})
    
  • Шаг 2: На самом деле нет шага 2, потому что вам не рекомендуется использовать кортежи для постоянных данныххранилища, но если вам действительно нужен массив кортежей

    let tupleArray = dictionary.map { ($0.0, $0.1) }
    

Лучшей моделью данных, чем кортеж, является пользовательская структура, например

struct Section {
    let prefix : String
    let items : [String]
}

, тогда сопоставьтеиз словаря в структуру и отсортировать массив по prefix

let sections = dictionary.map { Section(prefix: $0.0, items: $0.1) }.sorted{$0.prefix < $1.prefix}
print(sections)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...