我有一个项目列表,每个项目都有一个与之关联的排名.
Item 1, Rank=1
Item 2, Rank=2
Item 3, Rank=3
Item 4, Rank=4
Item 5, Rank=5
我想设计一种方法来处理项目的重新排名,其他项目的排名变化很小或没有变化.
我想到的一个解决方案是利用小数并使用Java的双变量类型.因此,例如,如果我在item2和item3之间移动item5,那么这将是输出 –
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次,达到双变量限制,我可能必须在此时重置所有等级)
我只是想知道是否有更好的方法来解决这个问题?
要记住一些事情.
>我需要将这个数据结构存储在一个数据库(Item,Rank)中,我将构建一个Web服务,它根据排名获得排序顺序的所有项目,因此我将进行数据库调用以获取所有项目的排序排名领域.
>我将使用Java,因此我只能处理Java变量.
解决方法:
如何编写一个小程序,均匀地分配数组(或列表或其他)中一系列元素的排名值?
如果在位置x处插入新元素,则将范围x-1 .. x 1的元素传递到子例程中.开始和结束位置的等级值保持不变,其他等级用偶数距离计算.如果成功,返回true.现在,如果距离变得太小而返回false,则调用者将范围扩展到x-2 .. x 2并再次进入子例程.
你必须要小心打击数组边界,甚至完全耗尽价值空间.