Arrays 将数组的长度扩展一个值。然后使用平均值填充斑点,以创建平滑效果

Arrays 将数组的长度扩展一个值。然后使用平均值填充斑点,以创建平滑效果,arrays,swift,algorithm,Arrays,Swift,Algorithm,在标题中很难解释,但我试图通过计算数组中点的平均值,将数组扩展到某个倍数。将它扩展2并不太困难,但我正努力通过自定义乘数来扩展它 例: 设x=[3,6,7] extendarray:x,乘数:3~~应该是[3,4.5,5.25,6,6.5,6.75,7] 中间的第一个值是3,6的平均值,下一个是4.5,6的平均值,然后移动到下一个值,依此类推 func extend(data: [Double], multiplier: Int) -> [Double] { var new = [

在标题中很难解释,但我试图通过计算数组中点的平均值,将数组扩展到某个倍数。将它扩展2并不太困难,但我正努力通过自定义乘数来扩展它

例:

设x=[3,6,7]

extendarray:x,乘数:3~~应该是[3,4.5,5.25,6,6.5,6.75,7]

中间的第一个值是3,6的平均值,下一个是4.5,6的平均值,然后移动到下一个值,依此类推

func extend(data: [Double], multiplier: Int) -> [Double] {
    var new = [Double]()
    var x = 0
    for i in 0..<(array.count*multiplier) {
        let value = data[x]
        new.append(value)

        if(data.count <= (x+1)) { break }

        let next = data[x+1]
        let mean = (value+next)/2
        new.append(mean)

        if(i%multiplier == 0 && i != 0) { x += 1 }
    }
    return new
}
已解决:

func extend(data: [Double], amount: Int) -> [Double] {
    var new = [Double]()

    for i in 0..<data.count {
        let value = data[i]
        new.append(value)

        if(data.count<=i+1) { break }

        let next = data[i+1]

        var means = [Double]()
        for z in 0..<amount {
            if(z==0) {
                let mean = (value + next)/2
                means.append(mean)
            } else {
                let mean = (means[z-1] + next)/2
                means.append(mean)
            }
        }
        for m in means {
            new.append(m)
        }
    }
    return new
}

因为您只增加了第一个originalArray.count-1,所以我们只需要循环遍历它们

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次迭代。否则,它似乎起作用了

所以[3,6,7]变成了[3,4.5,5.25,6,6.5,6.75,7]而不是[3,4,5,6,6,6.33,6.66,7]?另外,你是什么意思?大小?[3,6,7]。计数=3和[3,4.5,5.25,6,6.5,6.75,7]。计数=7。这显然不是大小的3倍:pye,打算用它来表示小数,这样就不能用整数来递增。我使用了extend和not multiply,因为是的,它小于这个大小的3倍,但是你不能扩展最后一个值,因为没有什么可以平均它。只有代码的答案并不总是有用的。你能对你所做的做些有益的解释吗?