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

Iphone 核心数据顺序:我可以使用浮动吗?,iphone,objective-c,sorting,Iphone,Objective C,Sorting,我一直在思考如何最好地订购一组核心数据管理对象,我想抛出一个我以前从未见过的想法,希望有更多CompSci经验的人能够告诉我这是否/为什么是一个坏主意:我们可以使用浮动来订购核心数据管理对象吗 情况是这样的: 简单来说,假设一所学校有很多老师 学校>>老师 一般来说,教师的顺序将保持不变(1、2、3、4、5),但有时,例如,我想将5号教师移到教师1和教师2之间 使用整数创建索引的常规方法意味着我需要对五个模型中的四个重新排序。我想知道的是,如果我用浮点数来订购模型呢?然后,对于我们的五个教师模型

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

情况是这样的:

简单来说,假设一所学校有很多老师

学校>>老师

一般来说,教师的顺序将保持不变(1、2、3、4、5),但有时,例如,我想将5号教师移到教师1和教师2之间

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

t1.顺序=1.0

t2.阶数=2.0

t3.0阶=3.0

t4.订单=4.0

t5.订单=5.0

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

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

因此,新列表如下所示:

t1.顺序=1.0

t5.订单=1.5

t2.阶数=2.0

t3.0阶=3.0

t4.订单=4.0

我现在有我的列表排序,因为我想它,只需要更新一个记录。我甚至可以在t5和t2之间移动t3:

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

t1.顺序=1.0

t5.订单=1.5

t3.订单=1.75

t2.阶数=2.0

t4.订单=4.0

这肯定是有原因的。当然,当你排序,排序,排序时,你会得到很长的浮动,可能会在某个点上失去精度,但是每隔一段时间,你可以将顺序重置为1.0,2.0,3.0。。。n、 0


有人能说服我不要这样做吗?

鉴于您已经指出的局限性,这是一种合理的方法:由于精度限制,可能发生碰撞。当然,您可以坚持使用整数,并从增加索引开始,例如,10000


无论哪种情况,您都需要能够检测碰撞,并在发生碰撞时采取必要的措施。因为你真正关心的只是“普通性”,你也可以不时地重新校准你的指数。如果对象集足够短,您可以按现有的“顺序”将它们排序到数组中,然后在数组中迭代,以指定的增量分配新的“顺序”值。

虽然是真的,但使用浮点的最初想法是避免不必要地设置顺序。当你总共有5名教师时,这就成立了,但假设你有10000名教师。使用
int
存储顺序,如果将教师3移动到位置5,则只需重新排列三个对象(3、4和5)。如果你使用浮动,足够多的这种性质的移动将使你通过(和排序)所有10000名教师,并重新分配索引。就我个人而言,我仍然使用整数。使用浮点数,我是否仍然需要在重新索引时更改t3、t4和t5?例如t6仍然是6.0,对吗?不同之处在于,使用浮点数时,我可以灵活地选择何时重新编制索引,比如在保存模型时,而不是在必须立即执行的情况下使用整数。还是我遗漏了什么?