Сортировка массива по количеству повторяющихся элементов

swift

#1

Добрый день!

Скажите пожалуйста, как отсортировать массив по количеству повторяющихся элементов?

К примеру:
Массив чисел [1, 2, 3, 4, 5, 3, 2, 1, 2, 2]
На выходе должно получиться: [2, 2, 2, 2, 3, 3, 1, 1, 4, 5 ]

Заранее спасибо!


#2
let items = [1, 2, 3, 4, 5, 3, 2, 1, 2, 2]
let mappedItems = items.map { ($0, 1) }
let counts = Dictionary(mappedItems, uniquingKeysWith: +)
let orderedItems = counts.sorted { $0.value > $1.value }
let result = Array(orderedItems.map { Array(repeating: $0.key, count: $0.value) }.joined())

#3
let items = [1, 2, 3, 4, 5, 3, 2, 1, 2, 2]
let result = items.reduce(into: [[Int]]()) { result, item in
    if let index = result.firstIndex(where: { $0.contains(item) }) {
        result[index] += [item]
    } else {
        result.append([item])
    }
}.sorted { $0.count > $1.count }.flatMap { $0 }