假设我们有一个排名系统,该系统的整数为1,最大为100.000。
我想要一个反转整数排名的函数。
因此,值100.000变为等级1,值1变为等级100.000。
function reverseRank($currentRank,$maxRank){
// create array with numbers 1 till $maxRank.
// reverse order of values and return key of $currentRank...
// but this seems a bit a waste of resources.
return $reversedRank;
}
在php中实现此性能明智的最佳方法是什么?
答案 0 :(得分:3)
为简单起见,我们假设您的排名范围介于1到10之间。
我们需要找到一个可以交换的映射函数
1 -> 10
2 -> 9
3 -> 8
4 -> 7
5 -> 6
6 -> 5
7 -> 4
8 -> 3
9 -> 2
10 -> 1
现在,考虑解决方案可能会更容易。
什么功能将起作用?此功能在运行时中有几件已知的事情。 范围的下限和上限,分别为1和10。
我们可以用较为正式的方式来勾勒出这一点:
f(1) -> 10
f(2) -> 9
f(3) -> 8
(...)
f(x) -> y; // 1 and 10 are know to be the limits
如果我们尝试申请该怎么办
让我们尝试使用它。 f(1)为10可能是:
def f(x):
return x*UPPER_LIMIT
毫无疑问,只要我们用2
尝试一下,它就会崩溃。
F(2)-> 9,看着它,我可以看到它可以写为:
让x返回一个比LOWER上限小得多的数字。
def f(x):
return UPPER_LIMIT - (x-LOWER_LIMIT)
而且,通过运行更多的值,它似乎可以正常工作。
希望我能理解您的问题,对您有帮助。