Swift - сортировка элемента массива по диапазону - PullRequest
0 голосов
/ 02 сентября 2018

Я сейчас работаю с модулем "Графики".

Мое приложение показывает гистограмму результатов спортсменов с:

  • Ось X: количество повторений / время / раунды / вес
  • Ось Y: количество спортсменов

Я бы хотел собрать количество повторений в разных группах.

Нечто подобное: 10

Что-то вроде этого: enter image description here

Каков наилучший способ сделать это? Я хоть о некоторых подходах:

  • Округлите количество повторений , чтобы преобразовать, например, 19 и 15 в 10 и 10 (для категории 10
  • Создать новый массив со словарями внутри , что-то вроде:

    [["10-20": 15, 17, 19], ["20-30": 21, 22, 22, 24] и т. Д.]

Но я не знаю, как этого достичь ...

Какой будет лучший способ?

1 Ответ

0 голосов
/ 02 сентября 2018

Вы можете использовать Dictionary 'init(grouping:by:) initializer для создания такого словаря:

let array = [15,17,19,22,24,24,27]
let dict = Dictionary(grouping: array, by: { $0 / 10 })

// dict is [2: [22, 24, 24, 27], 1: [15, 17, 19]]

Если я вас правильно понял, у вас, вероятно, есть куча Athlete с, и у них есть свойство reps. Вы можете группировать по $0.reps / 10 вместо:

Dictionary(grouping: athletes, by: { $0.reps / 10 })

А затем сопоставьте ключи и значения с этим:

.map { ("\($0.key * 10) - \(($0.key + 1) * 10)", $0.value.count) }

// now you have this:
// [("20 - 30", 4), ("10 - 20", 3)]
...