我有以下数组集保存优先级,
array1 = [1, 2, 1, 2, 3]
array2 = [1, 1, 1, 2, 3]
|
|
|
arrayn = [1, 3, 1, 2, 3]
我想找到最简单的方法来找出具有最高优先级的数组变量,即 1
应该按以下方式检查,
如果任何数组的最后一个元素是最低的,则应返回。 如果多个数组的最后一个元素相同,则该数组的前一个元素应该匹配 在上面给出的示例中,所有 3 个数组的最后 3 个值都是相同的,因此它将检查倒数第二个元素
array1 = 2
array2 = 1
array3 = 3
所以它应该返回 array2。
如果有人不明白这个问题,请告诉我
更多示例
示例1
arr1 = [1,1,1,1,3]
arr2 = [3,3,3,3,2]
should return arr2
示例2
arr1 = [2,2,2,1,3]
arr2 = [1,2,1,3,3]
should return arr1, as arr1.last == arr2.last (i.e. 3)
but arr1[3] < arr2[3] i.e. (1 < 3)
最佳答案
对于大小相等的数组(如果我正确理解问题),这应该有效:
arrays = [
[1, 2, 1, 1, 3],
[1, 3, 1, 2, 3],
[1, 1, 1, 2, 3],
[1, 3, 1, 1, 3]
]
p arrays[arrays.transpose.reverse.map{|el|
next if el.count(el.min) != 1
el.rindex(el.min)
}.compact[0]]
结果:
#=> [1, 1, 1, 2, 3]
一步一步:转置数组并从最后一个 block 开始检查。如果没有一个最小优先级,则跳过该 block (在输出中放入 nil),如果只有一个 - 获取它的索引。删除所有 nil 元素并使用第一个找到的索引来打印所需的数组。
已更新
如果您希望处理初始数组数组没有答案的情况,您可以通过以下方式更改代码:
idx = arrays.transpose.reverse.map{|el|
next if el.count(el.min) != 1
el.rindex(el.min)
}.compact[0]
p idx ? arrays[idx] : "no answer"
的结果[[1,1,1,1,1], [1,1,1,1,2], [2,1,1,1,1], [2,1 ,1,1,2]]
将是:
#=> "no answer"
关于ruby-on-rails - 如何比较 3 个以上的数组以找到优先级最高的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27401315/