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

时间:2016-10-27 00:45:17

标签: arrays swift enumerate

我有一个数组,例如

[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
}

3 个答案:

答案 0 :(得分:2)

map似乎是我的自然方式:

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

一般来说,当您想要将一个集合更改为具有一对一元素映射的另一个集合时,map就可以了。

答案 1 :(得分:0)

试试这个

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[$0] = $1 == 0 &&
        array.indices.contains($0 - 1) &&
        array[$0 - 1] > 0 ? array[$0 - 1] : $1
}

print(array)

答案 2 :(得分:0)

另一种选择:

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]