Поскольку вы увеличиваете только первое originalArray.count-1
, нам нужно только l oop через них.
func extend(data: [Double], multiplier: Int) -> [Double] {
var newData:[Double] = []
for i in 0 ..< data.count-1 {
let currentOriginalValue = data[i]
let nextOriginalValue = data[i+1]
let newValues = findHalfwayValues(firstVal: currentOriginalValue, secondVal: nextOriginalValue, times: multiplier-1)
newData += [currentOriginalValue] + newValues
}
newData.append(data[data.count-1])
return newData
}
func findHalfwayValues(firstVal:Double, secondVal:Double, times:Int) -> [Double] {
var newData:[Double] = []
var originalVal = firstVal
for i in 0 ..< times {
let halfway = findHalfway(firstVal: originalVal, secondVal: secondVal)
newData.append(halfway)
originalVal = halfway
}
return newData
}
func findHalfway(firstVal:Double, secondVal:Double) -> Double {
return (firstVal+secondVal)/2
}
print(extend(data: [3, 6, 7], multiplier: 3)) // [3.0, 4.5, 5.25, 6.0, 6.5, 6.75, 7.0]
Вот еще одно решение. Кроме того, в решении @ Nick есть небольшая ошибка, которая делает на 1 итерацию больше, чем следует. В противном случае, похоже, работает