在Bloite或SQL Lite中的文本中存储浮点列表是否有意义

时间:2012-02-23 11:00:35

标签: objective-c sqlite nsarray

我对iPhone的开发还很陌生 - 如果这是一个愚蠢的问题,请道歉;)

我有一堆数据用于映射值之间预先计算的关系

e.g。

将光输入映射到太阳能电池板的电源输出。

一个刻度是固定的并且可以很容易地计算(即它以0.1的步长上升并具有已知的起点和终点)

0.0 - 80.0

另一个比例是由我在文本格式中的一些数据定义的:

9.80293622028191E + 0000,9.82985159414126E + 0000,9.85682155471754E + 0000,9.88384617060865E + 0000,9.91092551045114E + 0000,9.93805964292038E + 0000,9.96524863673053E + 0000,9.99249256063480E + 0000,1.00197914834255E + 0001,1.00471454739344E + 0001,1.00745546010324E + 0001等

我可以在手机上使用它来绘制不同变量的行。

文本格式的总数据约为4mb(每条数据线约32kb)

问题是 - 如何最好地存储浮点值数组,以便我可以轻松更新它 - 并且还可以轻松加载它以进行显示?

我不需要从中选择一个值 - 我总是需要给定行的整个列表 - 所以将它存储为单个数据对象似乎是有意义的。我可以将它作为文本保存到文件中,然后在我想要更新它时覆盖该文件。但是 - 我将需要一个SQL lite数据库用于其他数据,这似乎更适合存储数据。

在SQL中使用float数据类型似乎是一个非常重要的方法 - 因为我总是想要一行完整的值集,所以每个选择都将是一个连接(我将不得不存储)订单信息,所以我可以按正确的顺序取回它们)

将整个数组推入字符串并将其存储为Text是否有意义?或者是否有一种可靠的方法将NSArray序列化为blob字段并在以后重建它?

----- ---------- EDIT

事实证明,SQLite数据库中的几千行浮点数在手机本身上非常慢。它在模拟器中没问题,但可能需要20秒左右才能在手机上加载。为了解决这个问题,我将这些数据放入平面文本文件中,并在将其加载到NSArray中时转换为浮点数。

1 个答案:

答案 0 :(得分:1)

您可以序列化/反序列化您的Array调用:

- (NSArray *)componentsSeparatedByString:(NSString *)separator;

- (NSString *)componentsJoinedByString:(NSString *)separator;

但是,我建议

1)将您的数组存储到文件中(writeToFile,arrayWithContentsOfFile)

或更好

2)按值将它们写入现有的SQLite-Database值。如果我找对你,你不需要任何加入。只需使用以下方法获取您的值:

SELECT y FROM data LIMIT start_value, end_value