【问题标题】:Convert array of Int8 to array of Float and reverse it将 Int8 数组转换为 Float 数组并将其反转
【发布时间】:2020-03-06 10:19:28
【问题描述】:

如何将Int8 的数组转换为Float 的数组再次还原它。

我有过滤浮点数据的功能,所以我需要先将其转换为[Float]并进行处理,然后再将其转换为[Int8]并提供给它

【问题讨论】:

标签: swift


【解决方案1】:

map 是你的朋友。您有两种方法使用此功能:

1.

    let myArray: [UInt8] = [1, 2, 3, 4, 5]

    let processedArray = myArray.map { element in
        let floatElement = Float(element)
        // process float
        return Int8(floatElement)
    }

2.

    let myArray: [UInt8] = [1, 2, 3, 4, 5]

    let processedArray = myArray
        .map { Float($0) } // convert to Float
        .map { operation($0) } // process the float & return a float
        .map { UInt8($0) } // reconvert to UInt8

两者是等效的,但我认为第二个选项更具可读性并且允许更多的灵活性。这是一个偏好问题。

【讨论】:

    【解决方案2】:
    extension Array where Iterator.Element == Int8 {
        var toFloatArray: [Float] {
            return self.map({Float($0)})
        }
    }
    
    extension Array where Iterator.Element == Float {
        var toIntArray: [Int8] {
            return self.map({Int8($0)})
        }
    }
    
    let myIntArr: [Int8] = [1,2,4]
    let myFloatArr: [Float] = myIntArr.toFloatArray
    print(myFloatArr)
    let newIntArr = myFloatArr.toIntArray
    print(newIntArr)
    

    为干净的可重用代码使用扩展。

    【讨论】:

      【解决方案3】:

      好的,我知道了,谢谢@Martin R

      let rr: [Int8] = [ 18, 21, 41, 42, 48, 50, 55, 90]
      
      var float = [Float](repeating: 0, count: rr.count)
      
      vDSP_vflt8(rr, 1, &float, 1, vDSP_Length(rr.count))
      
      
      
      var ints = [Int8](repeating: 0, count: rr.count)
      
      vDSP_vfix8(float, 1, &ints, 1, vDSP_Length(float.count))
      
      print(ints)
      

      【讨论】:

      猜你喜欢
      • 2015-02-12
      • 2019-05-30
      • 2014-06-28
      • 1970-01-01
      • 2017-04-01
      • 2019-12-04
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      相关资源
      最近更新 更多