我正在做一个小实验来增加我的知识,我已经达到了我觉得我可以真正优化它的部分,但我不太确定如何做到这一点。
我有很多数字数组。(为简单起见,假设每个数组有 4 个数字:1、2、3 和 4)
目标是让所有数字按升序排列(即 1-2-3-4),但这些数字都在不同的数组中打乱。
较高的权重放在较大的数字上。
我需要按照它们与目标的接近程度对所有这些数组进行排序。
即,4-3-2-1 将是最坏的情况。
一些示例案例:
3-4-2-1 is better than 4-3-2-1
2-3-4-1 is better than 1-4-3-2 (even though two numbers match (1 and 3).
the biggest number is closer to its spot.)
因此,大数字总是优先于较小的数字。这是我的尝试:
var tmp = from m in moves
let mx = m.Max()
let ranking = m.IndexOf(s => s == mx)
orderby ranking descending
select m;
return tmp.ToArray();
PS IndexOf 在上面的例子中,是我写的一个扩展,它接受一个数组和表达式,并返回满足表达式的元素的索引。它是必需的,因为情况确实有点复杂,我用我的例子来简化它。
不过,我在这里尝试的问题在于,它只会按最大的数字排序,而忘记所有其他数字。它应该按最大的数字排名第一,然后是第二大,然后是第三。
此外,由于它会一遍又一遍地执行此操作几分钟,因此它应该尽可能高效。