如何再次将Int8
的数组转换为Float
的数组。
我具有过滤浮动数据的功能,因此我需要先将其转换为[Float]
并进行处理,然后再次将其转换为[Int8]
并进行馈送
答案 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)