Sorter hash Ruby

Sorter hash Ruby

En hash eller en ordbok (på andre programmeringsspråk) refererer til en datastruktur som lagrer data i nøkkelverdipar. Hver tast i en hasj må være unik og kan være av en hvilken som helst gyldig Ruby -datatype.

Hashes er utrolig nyttige og kan spare deg for mye tid og kode når du brukes på riktig måte. Selv om de har en tendens til å oppføre seg som matriser, bruker hashes unike nøkler i stedet for heltallposisjoner. Tenk på hash som en ekte ordbok der hver nøkkel er unik og har en tilsvarende betydning eller verdi.

I denne guiden lærer vi hvordan du sorterer en hasj i Ruby ved hjelp av forskjellige metoder. Nei, vi vil ikke bruke fancy algoritmer eller benchmarks. Vi vil fokusere på innebygde rubin-sorteringsmetoder.

Ruby Hash - Det grunnleggende

Å skape en hasj i Ruby er veldig grei. Du starter med å definere en tast etterfulgt av => symbolet og verdien. Vi vedlegger elementer i en hasj i et par krøllete seler.

"nøkkel" => "verdi"

Du kan legge til flere nøkkelverdipar ved å skille dem ved hjelp av komma:

"MS" => "Massachusetts", "id" => "Idaho", "Ga" => "Georgia", "in" => "Indiana"

Ruby støtter også et annet format for å lage en hasj. I stedet for å bruke rakettnotasjon =>, kan du bruke kolon.

"MS": "Massachusetts", "Id": "Idaho", "Ga": "Georgia", "i": "Indiana"

Uansett hvilken metode du bruker for å lage en Ruby -hasj, vil Ruby -tolken gjenkjenne dem som gyldige hasj.

Hvis du vil lære å jobbe med Ruby Hashes, bør du vurdere opplæringen:

https: // linuxhint.com/how-to-use-ruby-hashes/

Sortering av hasj i rubin

For å sortere en hash i Ruby uten å bruke tilpassede algoritmer, vil vi bruke to sorteringsmetoder: Sorteringen og sorteringen_by.

Ved hjelp av de innebygde metodene kan vi sortere verdiene i en hasj med forskjellige parametere.

La oss diskutere:

#sortere

Den første metoden å bruke når du sorterer en hasj er sorteringsmetoden. Sorteringsmetoden returnerer en rekke de sorterte verdiene. Det fungerer ved å sammenligne verdiene ved hjelp av operatøren.

Eksempel 1

Tenk på eksemplet hasj nedenfor:

State_Info = "Massachusetts" => 78, "Idaho" => 72, "Georgia" => 41, "Indiana" => 45
State_info.sortere

Når vi kaller sorteringsmetoden mot hasj, vil den returnere nøklene sortert i alfabetisk rekkefølge.

[["Georgia", 41], ["Idaho", 72], ["Indiana", 45], ["Massachusetts", 78]]

Du vil merke at resultatet fra den sorterte hasj er i form av et flerdimensjonalt utvalg. Som nevnt returnerer sorteringsmetoden en rekke de sorterte verdiene.

For å få tilgang til de sorterte nøkkelverdiparene, kan du bruke indeksnotasjonen.

sorted_state = state_info.sortere
sortert_state [0]
["Georgia", 41]

Eksempel 2

La oss vurdere et scenario der vi trenger å sortere hasj etter verdiene i stedet for nøklene.

Dessverre er det ingen direkte måte å sortere hasj etter nøkler på. Vi kan imidlertid bruke verdimetoden for å hente hasjverdiene og sortere dem.

Ta en titt på eksemplet nedenfor:

State_info.verdier.sortere

Når vi har utført kommandoen ovenfor, bør vi få verdiene til hasj sortert i arrayformat.

[41, 45, 72, 78]

Eksempel 3

Verdiene for sorteringsmetoden er av array -type. Vi kan bytte dem tilbake til hasj ved å bruke TO_H -metoden.

Se på eksemplet nedenfor:

State_Info = "Massachusetts" => 78, "Idaho" => 72, "Georgia" => 41, "Indiana" => 45
State_info.sortere.to_h

Eksemplet over vil returnere hasj sortert som:

"Georgia" => 41, "Idaho" => 72, "Indiana" => 45, "Massachusetts" => 78
#Sorter etter

I eksempel 2 implementerte vi en enkel måte å sortere hasj etter verdier. Imidlertid er det en ulempe: vi sorterer bare nøklene og ikke nøklene.

For å løse dette, kan vi dykke til å bruke sort_by -metoden.

Eksempel 1

Tenk på State_info -hash fra de tidligere metodene:

State_Info = "Massachusetts" => 78, "Idaho" => 72, "Georgia" => 41, "Indiana" => 45

Ved å bruke sort etter kan vi utføre følgende operasjon:

State_info.sort_by | k, v | v

Du vil merke at metoden bruker rubinblokker for å sortere verdiene i den spesifiserte rekkefølgen. Sjekk opplæringen vår om Ruby Do for å lære mer.

Den resulterende verdien er:

[["Georgia", 41], ["Indiana", 45], ["Idaho", 72], ["Massachusetts", 78]]

Så +++ rting av verdiene fra den resulterende matrisen er i stigende rekkefølge. I dette eksemplet inkluderer vi både tastene og deres tilsvarende verdier.

Tilsvarende kan du tilbakestille resultatet til en hasj:

State_info.sort_by | k, v | v.to_h
"Georgia" => 41, "Indiana" => 45, "Idaho" => 72, "Massachusetts" => 78

Eksempel 2

Som standard vil sorteringsmetodene i Ruby sortere etter stigende rekkefølge. For å få de sorterte verdiene i omvendt rekkefølge, kan vi kalle #Reverse -metoden.

State_Info = "Massachusetts" => 78, "Idaho" => 72, "Georgia" => 41, "Indiana" => 45
State_info.sort_by | k, v | v.omvendt
[["Massachusetts", 78], ["Idaho", 72], ["Indiana", 45], ["Georgia", 41]]

Eksempel 3

Anta at vi har en nestet hasj. Hvordan sorterer vi verdiene i den nestede hasj?

Tenk på følgende eksempel Hash:

stater =
"Massachusetts" => "ABR" => "MA", "FIPS_CODE" => 25,
"Idaho" => "abr" => "id", "fips_code" => 16,
"Georgia" => "ABR" => "GA", "FIPS_CODE" => 13,
"Indiana" => "ABR" => "i", "FIPS_CODE" => 18

For å sortere hasj med verdiene til den nestede hasj, kan vi gjøre en sort_by som vist:

stater.sort_by | k, v | V ["FIPS_CODE"]

De resulterende verdiene er som:

[["Georgia", "ABR" => "GA", "FIPS_CODE" => 13],
["Idaho", "abr" => "id", "fips_code" => 16],
["Indiana", "ABR" => "In", "FIPS_CODE" => 18],
["Massachusetts", "ABR" => "MA", "FIPS_CODE" => 25]]

Som dette eksemplet viser, skriver resultatene ut sortert i stigende rekkefølge av verdiene i den nestede hasj.

Konklusjon

Ved hjelp av denne opplæringen så du på hvordan du bruker sorterings- og sort_by -metodene for å sortere en hasj i Ruby. Ved hjelp av denne guiden kan du skrive kort og mer effektiv rubinkode.