2012-01-01 8 views
11
a = { 
     1 => ["walmart", "walmart.com", 300.0], 
     2 => ["amazon", "amazon.com", 350.0], 
     ... 
    } 

Come trovare l'elemento con il valore più basso del valore float nel suo array?Trova il valore più basso in un hash

risposta

-4

Vedere la soluzione min_by nella risposta seguente. La mia risposta originale a questa domanda è stata molto meno efficace, come sottolineato nel commento.

+7

-1. Questo è l'algoritmo sbagliato in generale dato che è 'O (N log (N))' quando c'è una soluzione 'O (N)'. –

25

min_by è disponibile come metodo dal modulo Enumerable.

Ottiene la matrice di tutti i valori nell'Hash e quindi preleva il valore minimo in base all'ultimo elemento di ogni matrice.

a.values.min_by(&:last) 
2

Un altro metodo utile è sort_by dal modulo Enumerable pure. Organizzerà il tuo hash in ordine crescente. Quindi concatenare il metodo con first per ottenere il valore più basso.

a.sort_by { |key, value| value }.first 
Problemi correlati