Swift - добавить гранулярность в массиве (2 на 2, 5 на 5 и т. Д.) - PullRequest
0 голосов
/ 03 сентября 2018

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

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

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

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

Нечто похожее: 10

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

В зависимости от разницы между значениями Max() и Min(), я хочу изменить гранулярность.

Вот то, что у меня сейчас есть:

let resultTime = [2458, 3500, 3600] // Fake data -> 41min, 58min, 60 min
let dict = Dictionary(grouping: resultTime, by: { $0 / 60 }).map { ($0.key, $0.value.count) }

Таким образом, я могу иметь словарь, сгруппированный по минутам. Я получил это:

[(58, 1), (40, 1), (60, 1)]

Я бы хотел сгруппировать эти данные 2 по 2, чтобы вместо этого было что-то подобное:

[(60, 2), (40, 1)]

Можно ли поиграть с гранулярностью с groupBy?

1 Ответ

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

Как сказал @Alexander, решение состоит в том, чтобы округлить by функцию

Вы можете сделать это с помощью этой маленькой функции:

func roundWithCoef(_ x : Double, coef: Int) -> Int {
      return coef * Int(round(x / Double(coef)))
}

let dict = Dictionary(grouping: resultTime, by: { roundWithCoef(Double($0 / 60), coef: 4) }).map { ($0.key, $0.value.count) }

Таким образом, вы можете играть с коф число

...