我有一个如下的数组:
vals = [1,2,10,5,10,5,9,10]
我需要获取数组中最大元素的索引(在上面的例子中是
10
)。因此,在我的例子中,它应该输出另一个数组:[2, 4, 7]
。但是,当我使用带有块的#find_index
时,我只能得到第一个匹配的索引:[12] pry(main)> vals.find_index { |i| i == vals.max }
=> 2
我可以通过这种方法获得我想要的东西,但它似乎有些啰嗦:
[14] pry(main)> results = []
=> []
[15] pry(main)> vals.each_with_index do |elem, i|
[15] pry(main)* results << i if elem == vals.max
[15] pry(main)* end
=> [1, 2, 10, 5, 10, 5, 9, 10]
[16] pry(main)> results
=> [2, 4, 7]
有没有更符合 Ruby 风格的方法来完成这个任务呢?
vals.max
不是一个好的方案。这会导致每次都要遍历整个数组,因此时间复杂度为 O(N^2)。 - tadman