核心数据顺序:我可以使用浮点数吗?

时间:2010-11-09 19:54:09

标签: iphone objective-c sorting

我一直在思考如何最好地订购一组核心数据管理对象,我想抛出一个我以前没见过的想法,希望有更多CompSci经验的人能够分辨出来我是否/为什么这是一个坏主意:我们可以使用浮动来订购核心数据管理对象吗?

情况如下:

为简单起见,我们假设学校有很多教师。

学校>>教师

一般来说,教师的顺序将保持不变(1,2,3,4,5),但有时,我会在教师1和教师2之间移动5号教师。 / p>

使用整数创建索引的常规方法意味着我需要重新排序五个模型中的四个。我想知道的是,如果我使用浮动来订购模型怎么办?那么,对于我们的五个教师模型,他们会这样开始:

t1.order = 1.0;

t2.order = 2.0;

t3.order = 3.0;

t4.order = 4.0;

t5.order = 5.0;

当我想在t1和t2之间移动t5时,我执行此操作:

t5.order = ( t1.order + t2.order ) / 2.0;

所以新列表如下:

t1.order = 1.0;

t5.order = 1.5;

t2.order = 2.0;

t3.order = 3.0;

t4.order = 4.0;

我现在按照我的意愿对列表进行排序,只需要更新一条记录。我甚至可以在t5和t2之间移动t3:

t3.order = ( t5.order + t2.order ) / 2.0;

t1.order = 1.0;

t5.order = 1.5;

t3.order = 1.75;

t2.order = 2.0;

t4.order = 4.0;

必须有一个原因,为什么这不是的方式。当然,在排序,排序和排序时,你最终会得到很长的浮点数,并且可能会在某些时候耗尽精度,但是每隔一段时间,你就可以将订单重置为1.0,2.0,3.0。 .n.0。

有人能跟我说话吗?

1 个答案:

答案 0 :(得分:1)

这是一种合理的方法,考虑到您已经指出的限制:由于精度限制可能发生碰撞。当然,你可以坚持使用整数,然后按照增量(例如10000)进行索引。

在任何一种情况下,您都需要能够检测到碰撞并在发生碰撞时采取必要的措施。由于您真的只关心“常规”,您还可以不时重新校准您的指数。如果对象集合足够短,您可以通过现有的“顺序”将它们排序到一个数组中,然后遍历数组,以指定的增量分配新的“顺序”值。