bidimensionales arreglos array ruby arrays indexing element minimum

arreglos - array ruby



Ruby: ¿Cómo encontrar el índice del elemento de matriz mínimo? (4)

Sería interesante leer sobre otras situaciones (encontrar todo y solo el último elemento mínimo).

ary = [1, 2, 1] # find all matching elements'' indexes ary.each.with_index.find_all{ |a,i| a == ary.min }.map{ |a,b| b } # => [0, 2] ary.each.with_index.map{ |a, i| (a == ary.min) ? i : nil }.compact # => [0, 2] # find last matching element''s index ary.rindex(ary.min) # => 2

¿Hay alguna forma de reescribir esto más elegante? Creo que es un mal código y debe ser refactorizado.

>> a = [2, 4, 10, 1, 13] => [2, 4, 10, 1, 13] >> index_of_minimal_value_in_array = a.index(a.min) => 3


Esto atraviesa la matriz solo una vez, mientras que ary.index(ary.min) atravesaría dos veces:

ary.each_with_index.inject(0){ |minidx, (v,i)| v < a[minidx] ? i : minidx }


Creo que esto atravesará la matriz solo una vez y aún es fácil de leer:

ary = [2,3,4,5,1] # => [2,3,4,5,1] ary.each_with_index.min # => [1, 4] # where 1 is the element and 4 is the index


De hecho, me gusta la respuesta de @andersonvom, solo necesita repetir el conjunto una vez y aún obtener el índice.

Y en caso de que no desee usar ary.each_with_index.min , esto es lo que puede hacer:

ary = [2,3,4,5,1] # => [2,3,4,5,1] _, index_of_minimal_value_in_array = ary.each_with_index.min # => [1, 4] index_of_minimal_value_in_array # => 4