我有一個項目列表,每個項目都有一個與它相關的排名。在不改變所有項目的排名的情況下排列項目
Item 1, Rank=1
Item 2, Rank=2
Item 3, Rank=3
Item 4, Rank=4
Item 5, Rank=5
我想設計用來處理以最小的項目或其他項目的隊伍沒有變化的重新排序的方法。
我想到的一個解決方案是利用小數點並使用Java的雙變量類型。因此,舉例來說,如果我移動ITEM5 ITEM2和項目3之間,這將是輸出 -
Item 1, Rank=1
Item 2, Rank=2
Item 5, Rank=2.5
Item 3, Rank=3
Item 4, Rank=4
等等,
Item 1, Rank=1
Item 2, Rank=2
Item 4, Rank=2.25
Item 5, Rank=2.5
Item 3, Rank=3
此解決方案的工作,但之後的某一點(〜55個在移動相同的位置,我達到雙變量限制,我可能不得不重置所有級別在那一點)
我只是想知道是否有一些更好的方法來解決這個問題?
有幾件事要記住。
- 我需要這個數據結構存儲在數據庫中(項目,排名),我將建立一個Web服務,它獲得所有項目的基礎上排名的排序順序,所以我將作出一個數據庫調用get所有項目按排名字段排序。
- 我將使用Java,因此我只能處理Java變量。
看看https://github.com/mixonic/ranked-model - 我知道這是ruby/rails而不是java,但是你可以看看它們的實現並記下一些註釋。他們在等級之間使用非常大的空間來實現他們能夠在不改變整個等級的情況下改變事物的目標。 – PressingOnAlways
你使用什麼數據結構?鏈接列表允許將O(1)插入到列表中,一旦迭代到所需的索引。然後,您可以使用列表中項目的結構位置來指示排名。 – 4castle
我其實也想到了這個解決方案。但是,我會再擴大我的範圍,並在稍後的時間達到極限。感謝您將我指向github,但是:) :) –