Fjern duplikater fra en rubinarray

Fjern duplikater fra en rubinarray
En matrise er en utrolig datastruktur som lar deg lagre en samling av elementer. Hvert element i matrisen er tildelt med en unik heltallverdi som betegner sin posisjon i matrisen. Arrays er noen av de mest populære og allsidige datastrukturene i Ruby og andre programmeringsspråk. Du kan bruke matriser til å lagre alle typer data som strenger, heltall eller til og med andre matriser.

I motsetning til andre datastrukturer som ikke støtter dupliserte verdier, kan imidlertid matriser inneholde mer enn en verdi av samme type og verdi. Dette kan være et problem, spesielt når du lagrer unike verdier.

Denne opplæringen lærer oss hvordan du fjerner duplikatelementene fra en matrise ved hjelp av forskjellige metoder.

Bruke UNIQ -metoden i Ruby

I Ruby kan vi bruke UNIQ -metoden for å fjerne duplikatelementene fra en inngangsarray. Vi kan kalle denne metoden på en gitt matrise. Metoden returnerer deretter en ny matrise med duplikatelementene som fjernes.

Metoden fjerner duplikatelementene fra matrisen i rekkefølgen av utseende.

Denne metoden endrer ikke den opprinnelige matrisen. I stedet oppretter det en ny matrise med unike elementer, som vi kan tilordne en ny variabel eller brukes til å oppdatere en eksisterende variabel.

Ta eksempelet som vises i følgende:

arr = [1,2,3,1,3,3,1,2,3]

Hvis vi kaller UNIQ -metoden, bør den returnere den forrige matrisen med de strippede duplikatelementene.

IRB (hoved): 013: 0> arr.uniq
=> [1, 2, 3]

Uansett hvor mange duplikatverdier som er i matrisen, returnerer metoden bare en enkelt verdi av typen.

Som nevnt modifiserer ikke UNIQ -metoden den opprinnelige matrisen. Derfor kan vi lagre den resulterende verdien til en ny variabel som vist i følgende:

IRB (hoved): 014: 0> new_arr = arr.uniq
=> [1, 2, 3]

For å endre den originale matrisen, kan vi bruke Uniq! metode. Denne metoden fjerner duplikatverdiene fra den opprinnelige matrisen og endrer den for å gjenspeile den nye matrisen.

IRB (hoved): 015: 0> arr.uniq!
=> [1, 2, 3]
IRB (hoved): 016: 0> arr
=> [1, 2, 3]

Som du kan se, er verdien av ARR -variabelen permanent endret.

Hente unike gjenstander etter klasse

UNIQ -metoden fungerer ved å lage en hasj ut av elementene i matrisen. Siden hasjetastene er unike, kan vi derfor få listen over tastene og bruke dem til å lage en ny matrise.

Vi kan imidlertid overføre en blokk til metoden for å filtrere ut elementene etter klasse. Et eksempel er demonstrert i følgende:

IRB (hoved): 017: 0> arr = [1, '1', 2, '2', 3, '3']

For å sortere ut duplikatverdiene etter klasse, kjør følgende:

[cc lang = "tekst" bredde = "100%" høyde = "100%" rømte = "true" tema = "blackboard" nowrap = "0"]

[/cc]

Vi kaller UNIQ -metoden på ARR med &: klasseargumentet. Dette er kjent som "Symbol til Proc" -konvertering. Det konverterer symbolet: klasse til en proc | obj | obj.klasse.

Å kalle den unike metoden med proc som et argument returnerer en ny matrise som bare inneholder de unike elementene basert på klassen til hvert element.

I dette tilfellet bevarer metoden bare en 1, en “1”, og så videre. Men det holder den første forekomsten av tallet og den første forekomsten av strengen.

Dette er fordi den bruker klassemetoden til elementet. Klassen på heltallene og strengene er forskjellige.

Konklusjon

Vi diskuterte om å bruke UNIQ -metodene for å fjerne duplikatverdiene fra en inngangsarray. Vi lærte også hvordan du opererer på plass, slik at du kan erstatte den originale matrisen og sortere ut duplikatverdiene basert på overordnet klasse.