Un Set a è una sequenza di valori unici di tipo a.
I valori devono essere di tipo comparable (Int, Float, Time, Char, String, e tuple o array di tipi comparabili).
Puoi trasformare array e set l'uno nell'altro con Set.toList e Set.fromList.
Data la struttura interna di Set, è garantito che un array ottenuto da Set.fromList sarà ordinato.
Set.fromList [2, 3, 3, 3, 1, 1, 2]
--> Set.fromList [1, 2, 3]
Set.toList (Set.fromList [2, 3, 3, 3, 1, 1, 2])
--> [1, 2, 3]
Puoi creare e popolare set con Set.empty, Set.singleton, Set.insert e Set.remove.
Set.empty
--> Set.fromList []
Set.singleton "hi"
--> Set.fromList ["hi"]
eightyEight = Set.singleton 88
Set.insert 88 eightyEight
--> Set.fromList [88]
Set.insert 89 eightyEight
--> Set.fromList [88, 89]
Set.remove 88 eightyEight
--> Set.fromList []
Set.remove 89 eightyEight
--> Set.fromList [88]
Puoi interrogare il contenuto di un set con le funzioni Set.member, Set.isEmpty e Set.size.
Set.member 88 eightyEight
--> True
Set.isEmpty eightyEight
--> False
Set.size eightyEight
--> 1
I set si possono combinare con Set.union, Set.intersect e Set.diff.
a = Set.fromList [1, 10, 100]
b = Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Set.union a b
--> Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]
Set.intersect a b
--> Set.fromList [1, 10]
Set.diff a b
--> Set.fromList [100]
Set.diff b a
--> Set.fromList [2, 3, 4, 5, 6, 7, 8, 9]
Puoi filtrare e partizionare i set.
even n = modBy 2 n == 0
Set.filter even b
--> Set.fromList [2, 4, 6, 8, 10]
Set.partition even b
--> (Set.fromList [2, 4, 6, 8, 10], Set.fromList [1, 3, 5, 7, 9])
La tua nostalgia per le carte Blorkemon™️ non accenna a placarsi: hai persino ricominciato a collezionarle e stai convincendo i tuoi amici a unirsi a te.
In questo esercizio, una collezione di Card è rappresentata da Set Card, dato che le carte duplicate non sono importanti quando l'obiettivo è ottenere tutte le carte esistenti.
Vuoi davvero che i tuoi amici entrino nella tua follia Blorkemon™️, e il modo migliore è far partire la loro collezione regalando loro una carta.
Implementa newCollection, che trasforma una carta in una collezione.
newCollection "Newthree"
--> Set.fromList ["Newthree"]
Una volta ottenuta una collezione, questa acquisisce vita propria e deve crescere.
Implementa addCard, che prende una Card e una collezione e restituisce una Tuple con due valori: un Bool che indica se la Card era già presente nella collezione, e la collezione con la carta aggiunta.
addCard "Scientuna" (Set.fromList ["Newthree"])
--> (False, Set.fromList ["Newthree", "Scientuna"])
Ora che i tuoi amici sono di nuovo pazzi per i Blorkemon™️, puoi approfittarne per far crescere la tua collezione scambiando carte.
Non tutti gli scambi valgono la pena, né sono sempre possibili. Non puoi scambiare una carta che non hai, e non dovresti scambiare una carta con una che hai già.
Implementa tradeCard, che prende due carte da scambiare (la tua e la loro) e la tua collezione attuale.
Il valore restituito è una Tuple di due valori: un Bool che indica se lo scambio è possibile e vale la pena farlo, e la collezione che otterresti se facessi lo scambio (anche se in realtà non è possibile).
tradeCard "Scientuna" "Newthree" (Set.fromList ["Scientuna"])
--> (True, Set.fromList ["Newthree"])
Trovi una vecchia scorta di carte a un mercatino delle pulci. Devi ordinare le carte e rimuovere i duplicati per confrontare l'array con la tua collezione.
Implementa removeDuplicates, che ordina un array di carte e restituisce un array di carte ordinate e uniche.
removeDuplicates ["Newthree", "Newthree", "Newthree", "Scientuna"]
--> ["Newthree", "Scientuna"]
È il momento di essere soddisfatti della tua collezione.
Implementa extraCards, che prende la tua collezione e un'altra collezione e restituisce il numero di carte che l'altra collezione non ha.
extraCards (Set.fromList ["Scientuna"]) (Set.fromList ["Newthree", "Scientuna"])
--> 0
Tu e i tuoi amici appassionati di Blorkemon™️ vi riunite e vi chiedete quali carte siano le più comuni.
Implementa boringCards, che prende un array di collezioni e restituisce un array di carte ordinate che tutte le collezioni hanno.
boringCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
--> ["Scientuna"]
Tu e i tuoi amici possedete collettivamente tutte le carte Blorkemon™️?
Implementa totalCards, che prende un array di collezioni e restituisce il numero totale di carte diverse in tutte le collezioni.
totalCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
--> 2
Tuo nipote verrà presto a trovarti e hai voglia di impressionarlo. Ai bambini piacciono le cose luccicanti, no? Le carte Blorkemon™️ possono essere luccicanti!
Implementa splitShinyCards, che prende una collezione e restituisce una Tuple con due array di carte ordinate: uno con tutte le carte che iniziano con "Shiny" e uno con le altre carte.
splitShinyCards (Set.fromList ["Newthree", "Scientuna", "Shiny Scientuna"])
--> (["Shiny Scientuna"], ["Newthree", "Scientuna"])
Iscriviti a Exercism per imparare e padroneggiare Elm con 28 concetti110 esercizi e il mentoring di persone reali, tutto gratis.