2011-12-17 64 views
0

给定图像列表,每个图像都有一个字段位置。我编错了方向。算法翻转订购号码

该列表将根据其位置排序:1是最上面的项目。我不小心给了那个项目最高的数字,而它应该被给予最低。

我数点

[a=> 9, b=> 7, c=> 3, d=> 2, e=> 1] 

但我希望他们编号

[e=> 9, d=> 7, c=> 3, b=> 2, a=> 1] 

我应该使用这是什么样的算法? Ruby中的(伪)代码的红点:)

实际上,在该列表中大约有400个图像,位置编号(Image.position)从1040开始并下降到1;这意味着有一些差距(例如341到600不存在)。

注1:显然,我可以简单地颠倒我的代码中的顺序。但这很丑陋,令人困惑,并打破了诸如“move_to_top”等方法的工作,我也需要重写这些方法。

注2:该代码似乎允许负数,所以每个位置编号的作用是* -1。但感觉难看和困惑。

回答

1

如果您只需要反转编号,并且不关心使用了哪些精确数字,只需选取一个大于列表中最大数字的数字,并从中减去数字即可获得新数字。

例如,如果选择10,然后10-9 = 1,10-7 = 3,10-3 = 7,10-2 = 8,10-1 = 9。