2010-11-09 77 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

相關問題