Как сгруппировать этот массив и составить индексный список словаря в алфавитном порядке - PullRequest
0 голосов
/ 12 октября 2019

Вот мой массив

var contacts = [
    ExpandableNames(isExpanded: true, names: ["Hong Kong", "Bangkok, Thailand", "London, UK", "Singapore", "Bali, Indonesia", "Dubai, United Arab Emirates", "Paris, France", "New York City, US", "Milan, Italy", "Vienna, Austria", "Shenzhen, China", "Kuala Lumpur, Malaysia", "Phuket, Thailand", "Rome, Italy", "Tokyo, Japan", "Lisbon, Portugal", "Istanbul, Turkey", "Seoul, South Korea", "Amsterdam, Netherlands", "Guangzhou, China", "Prague, Czech Republic", "Mecca, Saudi Arabia", "Rio De Janeiro, Brazil", "Mumbai, India", "Barcelona, Spain", "Pattaya, Thailand", "Shanghai, China", "Antalya, Turkey", "Las Vegas, US"].map{ Contact(name: $0, hasFavorited: false) }),
]

Вот мои структурные переменные в другом файле swift

import Foundation

struct ExpandableNames {
    var isExpanded: Bool
    var names: [Contact]
     //let names: String

}

struct Contact {
    let name: String
    var hasFavorited: Bool
}

1 Ответ

0 голосов
/ 30 октября 2019
let arrYourCities:[String] = ["Hong Kong", "Bangkok", "Thailand", "London", "UK", "Bangladesh"] //Your cities' array here

let allFirstAlphabets = arrYourCities.map({$0.first!})

let arrIndexList = uniq(source: allFirstAlphabets).sorted(by: <) // Your desired output ["B", "H", "L", "T", "U"]

Вспомогательная функция для получения уникального массива, чтобы алфавиты индекса словаря не дублировались

func uniq<S : Sequence, T : Hashable>(source: S) -> [T] where S.Iterator.Element == T {
            var buffer = [T]()
            var added = Set<T>()
            for elem in source {
                if !added.contains(elem) {
                    buffer.append(elem)
                    added.insert(elem)
                }
            }
            return buffer
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...