将Int8数组转换为Float数组并将其反转

时间:2020-03-06 10:19:28

标签: swift

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

我具有过滤浮动数据的功能,因此我需要先将其转换为[Float]并进行处理,然后再次将其转换为[Int8]并进行馈送

3 个答案:

答案 0 :(得分:1)

map是您的朋友。您可以使用2种方法使用此功能:

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

两者都是等效的,但我认为第二个选项更具可读性,并允许更多的灵活性。这是个人喜好。

答案 1 :(得分:1)

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)

将扩展名用于干净的可重用代码。

答案 2 :(得分:0)

好吧,谢谢@ 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)