我有一个double值数组,应存储在外部文件中。我将数组转换为NSMutableData并将数据保存到磁盘。
某些双精度值缺失(零)或为零(0.0)。 缺失值可以用0.0或最大双重表示替换。
但Double没有最大值(如Int.max),并且NSData将0.0值解释为终止字节。因此,每次遇到0.0值时,数据都会很快结束。
var description: String {
var output: String = ""
for value in self
{
output = output + "\(value)\n"
}
return output
}
var count : Int { return data.length/sizeof(Double) }
func append(var value: Double)
{
self.data.appendBytes(&value, length: self.size)
}
subscript(index: Int) -> Double?
{
assert(index < self.count, "index exceeds bounds")
var output : Double?
self.data.getBytes(&output, range: NSRange(location: index * self.size, length: self.size))
return output
}
修改
D&#39;哦,我正在使用generate打印出值,而GeneratorOf在第一个nil值之后停止。那么,表示零值以区分0.0的好方法是什么?
func generate() -> GeneratorOf<Double>
{
var index = 0
var count = self.counter
return GeneratorOf<Double> {
if index < count
{
return self[index++]
}
return nil
}
}
EDIT2
它是Double.infinity而不是Int.max
我现在需要醒来。
答案 0 :(得分:0)
我想到的唯一解决方案是使用NSNumber
包装双精度数,因此可以正确处理0.0,nulls
然后可以使用NSNull
。您是否有任何特定原因未使用NSNumber
?