2010-11-09 34 views
2

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

的情况是这样的:

为了简单起见,假设一所学校有很多老师。

学校教师>>

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

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

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;

现在我有列表按照我的需要排序,只需更新一条记录。我甚至可以移动T3 T5和T2之间:

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

考虑到您已经指出的限制,这是一个合理的方法:由于精度限制而导致碰撞的可能性。当然,你可以坚持整数,并以10000的增量索引开始。

无论哪种情况,您都需要能够检测到碰撞并在发生碰撞时采取必要的行动。既然你真的只关心“顺序”,你也可以不时重新校准你的指数。如果一组对象足够短,您可以按照现有的“顺序”将它们排序为一个数组,然后遍历数组以指定的增量分配新的“顺序”值。

+0

虽然是真的,但使用浮动的原始想法是为了避免不必要地设置顺序。当你总共有5位老师时,这就成立了,但假设你有10,000位老师。使用'int'存储顺序,如果将教师3移动到位置5,则只需重新排序三个对象(3,4和5)。如果你使用的是花车,那么这种性质的动作将会让你通过(排序)所有10,000名教师并重新分配索引。就我个人而言,我仍然使用整数。 – 2010-11-09 20:36:34

+0

使用浮动,我不会只改变老师t3,t4和t5的重新索引吗?例如。 t6仍然是6.0,对吧?不同之处在于,使用浮点数,我可以灵活地选择重新编制索引时的状态,例如保存模型时使用整数,而不必立即使用整数。或者我错过了什么? – 2010-11-09 20:40:14

相关问题