元素 > 0 之后的数组将所有元素更改为该值,直到下一个非零值

Array after an element is > 0 change all elements to that value until next non zero value

我有一个数组,例如

[0.0, 0.0, 55.0, 0.0, 0.0, 55.0, 55.0, 22.0, 0.0, 55.0] 

如果前一个值 > 0,如何更改值为 0 的元素?所以

[0.0, 0.0, 55.0, 0.0, 0.0, 55.0, 55.0, 22.0, 0.0, 55.0]

变成

[0.0, 0.0, 55.0, 55.0, 55.0, 55.0, 55.0, 22.0, 22.0, 55.0]

我尝试了以下方法,它只删除了零。

func weightArrayRemovedZero(array: [Double])->[Double]{

 var arrayToAlter = [Double]()

 for(index,item) in array.enumerated() {

   print("The \(item) is at index:\(index)")

   if item == 0.0 {
     if index > 0 && index < array.count - 1 {

       if array[index - 1] != 0.0 {
         let nonZeroElement = array[index - 1]
         arrayToAlter.append(nonZeroElement)
       }
     }


   } else {
     arrayToAlter.append(item)
   }
 }

 return arrayToAlter
}

试试这个

var array = [0.0, 0.0, 55.0, 0.0, 0.0, 55.0, 55.0, 22.0, 0.0, 55.0]

array.enumerated().forEach {
    array[[=10=]] =  == 0 &&
        array.indices.contains([=10=] - 1) &&
        array[[=10=] - 1] > 0 ? array[[=10=] - 1] : 
}

print(array)

另一个选项:

var array = [0.0, 0.0, 55.0, 0.0, 0.0, 55.0, 55.0, 22.0, 0.0, 55.0]

for i in array.indices {
    if i == 0 { continue }
    if array[i] == 0  && array[i-1] != 0 {
        array[i] = array[i-1]
     }
}

// [0, 0, 55, 55, 55, 55, 55, 22, 22, 55]

map 似乎是我的自然方法:

var last = 0.0
let mapped = values.map { elem -> (Double) in
    last = elem > 0.0 ? elem : last
    return last
}

一般来说,当您想通过一对一的元素映射将一个集合更改为另一个集合时,map 是您的首选。