我有一個這樣的陣列:查找最大元素的所有索引陣列
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]
有沒有人有一個更紅寶石般的方式任何想法做到這一點?
爲數組中的每個元素調用'vals.max'並不是一個好計劃。每次都必須爲每個元素旋轉數組,所以你在那裏是O(N^2)。 – tadman 2014-11-21 15:31:05
非常好的一點@tadman - 我可以將它的最大值存儲在它自己的變量中用於比較。 – Anthony 2014-11-21 15:32:56