Я обнаружил, что использование получателей реального имени и фамилии в теле - это надежный способ получить фильтр спама.
Вы можете сделать это следующим образом:
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]
При делении каждого значения на последнее значение в последнем утверждении карты вы игнорируете тот факт, что все уже вычтено из первого значения.
Чтобы исправить это, вы должны разделить диапазон значений (разница между максимальным значением и минимальным значением).
Если ваш массив отсортирован, это будет:
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
}
Используя ваш стиль кода, вы должны использовать что-то вроде этого:
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)
}
Реальная проблема в том, что вы делите каждый элемент на «начальное» максимальное значение (не сдвигается на минимальное значение).