【问题标题】:Array after an element is > 0 change all elements to that value until next non zero value元素后的数组> 0 将所有元素更改为该值,直到下一个非零值
【发布时间】:2016-10-27 00:45:16
【问题描述】:

我有一个数组,例如

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

【问题讨论】:

    标签: arrays swift enumerate


    【解决方案1】:

    map 似乎是我的自然方法:

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

    一般来说,map 是您想要将一个集合更改为另一个具有一对一元素映射的集合时的选择。

    【讨论】:

    • 你打败了我,@David Berry!
    【解决方案2】:

    试试这个

    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)
    

    【讨论】:

      【解决方案3】:

      另一种选择:

      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]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-23
        • 2021-03-07
        • 1970-01-01
        • 2023-01-16
        • 1970-01-01
        • 2013-08-02
        相关资源
        最近更新 更多