Деление массива двойников

Я обнаружил, что использование получателей реального имени и фамилии в теле - это надежный способ получить фильтр спама.

0
задан rmaddy 17 March 2019 в 21:51
поделиться

3 ответа

Вы можете сделать это следующим образом:

let dates: [Double] = [1542412800000,
                       1542499200000,
                       1543017600000,
                       1543708800000,
                       1544659200000,
                       1547164800000,
                       1550880000000]

let sorted = dates.sorted()

guard let first = sorted.first,
    let last = sorted.last,
    last != first
    else {
    fatalError()
}

let denominator = last - first

let percentages = sorted.map { ([110] - first)/denominator }

print(percentages) //[0.0, 0.01020408163265306, 0.07142857142857142, 0.15306122448979592, 0.2653061224489796, 0.5612244897959183, 1.0]
0
ответ дан ielyamani 17 March 2019 в 21:51
поделиться

При делении каждого значения на последнее значение в последнем утверждении карты вы игнорируете тот факт, что все уже вычтено из первого значения.

Чтобы исправить это, вы должны разделить диапазон значений (разница между максимальным значением и минимальным значением).

Если ваш массив отсортирован, это будет:

guard let maxValue = dates.last, let minValue = dates.first else {
    return
}
let percentages = dates
    .map {[110] - minValue}
    .map {[110] / (maxValue - minValue)}

Это нормализует все значения так, что первое значение равно 0, а последнее значение равно 1, а все остальное находится между ними.

Если вы не хотите нормализовать первое значение до 0 (но держите все от 0 до 1), вы можете пропустить шаг вычитания:

let percentages = dates.map {[111] / maxValue}

Если ваш массив не отсортирован, вы можете используйте функции .min() и .max() вашего массива:

guard let maxValue = dates.max(), let minValue = dates.min() else {
    return
}
0
ответ дан Palle 17 March 2019 в 21:51
поделиться

Используя ваш стиль кода, вы должны использовать что-то вроде этого:

var dates: [Double] = [1542412800000,
                       1542499200000,
                       1543017600000,
                       1543708800000,
                       1544659200000,
                       1547164800000,
                       1550880000000]

let intermediate: [Double] = dates
    .map{[110] - dates.first!}
    let percentages = intermediate
    .map{[110]/intermediate.last!}
percentages.forEach{ it in
    print(it)
}

Реальная проблема в том, что вы делите каждый элемент на «начальное» максимальное значение (не сдвигается на минимальное значение).

0
ответ дан Vyacheslav 17 March 2019 в 21:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: