Ancora lavorando attraverso la programmazione di Intelligenza Collettiva e l'utilizzo di Clojure per scrivere il codice. Ho funzionato, ma alcune parti sono davvero brutte, quindi ho pensato di chiedere ad alcuni degli esperti qui intorno di aiutarlo a ripulirlo.Rimozione di elementi da una mappa in base ai contenuti di un'altra mappa
Supponiamo che ho una mappa che assomiglia a questo (legato a "RECS '):
{"Superman Returns" 3.902419556891574, "Lady in the Water" 2.8325499182641614,
"Snakes on a Plane" 3.7059737842895792, "The Night Listener" 3.3477895267131017,
"You, Me and Dupree" 2.651006036204627, "Just My Luck" 2.5309807037655645}
e voglio per rimuovere gli elementi con chiavi che sono anche nella mappa (legato a' MyMovies "):
{"Snakes on a Plane" 4.5, "You, Me and Dupree" 1.0, "Superman Returns" 4.0}
modo che ho la mappa:
{"Lady in the Water" 2.8325499182641614, "The Night Listener" 3.3477895267131017,
"Just My Luck" 2.5309807037655645}
il codice che sono riuscito ad ottenere per fare questo si presenta come:
(apply merge (map #(hash-map (first %) (second %))
(remove #(contains? mymovies (first %))
recs)))
Questo sembra abbastanza brutto per me. Non sembra che dovrebbe essere necessario creare una mappa dal valore che torno da "rimuovere". C'è un modo più pulito per fare questo?
AGGIORNAMENTO: la risposta di Joost in basso ha suscitato un'altra idea. Se mi rivolgo le chiavi delle due mappe in serie posso usare Select-chiavi come questo:
(select-keys recs (difference (set (keys recs))
(set (keys mymovies))))
Joost, grazie per avermi accensione per selezionare -chiavi. Prima non sapevo di questa funzione. Ora vai a riscrivere molte altre sezioni con questa nuova conoscenza trovata!
Bello! Non sono sicuro di come ho perso quella funzione. Così tante funzioni da imparare e ricordare ... –
Cosa Dave ha detto :) –