Capire il metodo sort_by di Ruby: una guida per principianti

Capire il metodo sort_by di Ruby: Guida per principianti

Ruby's ordinamento_per è un metodo potente e flessibile per ordinare collezioni come array e hash in base a criteri specifici. A differenza del più generale metodo tipo metodo, ordinamento_per semplifica il processo di ordinamento quando si tratta di una logica di ordinamento complessa o personalizzata. In questa guida, esploreremo le funzioni di ordinamento_per Il metodo viene illustrato passo per passo, con esempi che aiutano i principianti a comprenderne l'utilità.

Qual è il ordinamento_per Metodo?

Il ordinamento_per è un metodo Enumerable di Ruby che ordina un insieme valutando un blocco per ogni elemento. Il blocco restituisce un valore che serve come base per l'ordinamento. Questo metodo è particolarmente utile quando gli elementi stessi non sono direttamente confrontabili o quando è necessaria una logica di ordinamento personalizzata.

Sintassi di ordinamento_per

collection.sort_by { |elemento| blocco }

Qui:

  • collezione è l'array o l'oggetto enumerabile che si vuole ordinare.
  • blocco specifica i criteri da utilizzare per l'ordinamento.

Il ordinamento_per restituisce un nuovo array con gli elementi ordinati in base ai valori restituiti dal blocco.

Esempio semplice

Cominciamo con un esempio di base di ordinamento di un array di stringhe in base alla loro lunghezza.

parole = ["mela", "pera", "banana", "kiwi"].

# Ordinamento per lunghezza delle stringhe

parole_ordinate = parole.sort_by { |parola|parola.lunghezza }

mette sorted_words.inspect

Produzione:

["pera", "kiwi", "mela", "banana"].

Qui, il blocco { |parola|parola.lunghezza } valuta la lunghezza di ogni stringa e ordinamento_per utilizza queste lunghezze per ordinare l'array.

Ordinamento dei numeri

Se si dispone di un array di numeri, ordinamento_per potrebbe non sembrare necessario, ma può comunque essere usato per una logica di ordinamento personalizzata. Ad esempio, per ordinare i numeri in base ai loro valori assoluti:

numeri = [10, -5, 3, -8]

numeri_ordinati = numeri.sort_by { |num| num.abs }

mette sorted_numbers.inspect

Produzione:

[3, -5, -8, 10]

Qui, il blocco { |num| num.abs } restituisce il valore assoluto di ogni numero e ordinamento_per utilizza questi valori per l'ordinamento.

Ordinamento degli hashish

ordinamento_per è particolarmente utile per ordinare gli hash in base alle chiavi o ai valori.

punteggi = { "Alice" => 90, "Bob" => 75, "Charlie" => 85 }

# Ordinamento per valori

sorted_scores = scores.sort_by { |nome, punteggio| punteggio }

mette sorted_scores.inspect

Produzione:

[["Bob", 75], ["Charlie", 85], ["Alice", 90]]

Si noti che ordinamento_per restituisce un array di coppie chiave-valore, non un hash. È possibile convertirlo nuovamente in un hash, utilizzando il metodo to_h:

sorted_scores_hash = sorted_scores.to_h

mette sorted_scores_hash.inspect

Produzione:

{"Bob"=>75, "Charlie"=>85, "Alice"=>90}

Esempio avanzato: Ordinamento di array annidati

Si consideri uno scenario in cui si ha un array annidato di nomi di studenti e dei loro voti e si vuole ordinare per voto.

studenti = [["Alice", 90], ["Bob", 75], ["Charlie", 85]]

# ordinamento per grado

sorted_students = students.sort_by { |student| student[1] }

mette sorted_students.inspect

Produzione:

[["Bob", 75], ["Charlie", 85], ["Alice", 90]]

Confronto tipo E ordinamento_per

Il tipo può ottenere risultati simili, ma richiede un'impostazione più manuale. Ad esempio:

words.sort { |a, b| a.length b.length }

Anche se funziona, è meno leggibile dell'equivalente ordinamento_per:

words.sort_by { |parola|parola.lunghezza }

Per criteri complessi, ordinamento_per è in genere più conciso e più facile da capire.

Quando usare ordinamento_per

Utilizzo ordinamento_per quando:

  1. È necessario ordinare in base a un attributo specifico di ciascun elemento.
  2. Si vuole un processo di ordinamento più pulito e leggibile.
  3. Le prestazioni sono un problema per l'ordinamento complesso, dato che ordinamento_per valuta il blocco una volta per elemento e utilizza i risultati per l'ordinamento.

Limitazioni di ordinamento_per

Mentre ordinamento_per è efficiente e facile da usare, potrebbe non essere la scelta migliore se:

  1. È necessario ordinare direttamente all'interno di un hash senza convertirlo in un array e viceversa.
  2. I criteri di ordinamento coinvolgono più attributi e richiedono una logica di confronto avanzata. In questi casi, tipo con un blocco personalizzato potrebbe essere più appropriato.

Conclusione

Il ordinamento_per è uno strumento versatile di Ruby che semplifica l'ordinamento con una logica personalizzata. Sia che si lavori con stringhe, numeri, array o hash, ordinamento_per aiuta a scrivere codice pulito ed efficiente. Comprendendo la sua sintassi e le sue applicazioni, si può sfruttare la sua potenza per gestire una varietà di compiti di ordinamento. Sperimentare con ordinamento_per nei vostri progetti per vedere come può semplificare il vostro codice Ruby! RailsCarma offre soluzioni software all'avanguardia e su misura per le vostre esigenze aziendali, specializzandosi in Sviluppo di Ruby on Rails, innovazioni basate sull'intelligenza artificiale e applicazioni di livello aziendale.

Articoli correlati

Informazioni sull'autore del post

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


it_ITItalian