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" => 45Nå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.sortereEksempel 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.sortereNå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" => 45Eksemplet over vil returnere hasj sortert som:
"Georgia" => 41, "Idaho" => 72, "Indiana" => 45, "Massachusetts" => 78I 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" => 45Ved å bruke sort etter kan vi utføre følgende operasjon:
State_info.sort_by | k, v | vDu 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_hEksempel 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" => 45Eksempel 3
Anta at vi har en nestet hasj. Hvordan sorterer vi verdiene i den nestede hasj?
Tenk på følgende eksempel Hash:
stater =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],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.