Filter für Listen, die in Clojure
Ich habe ein bisschen Schwierigkeiten mit den Listen in Clojure
Ich habe eine kurze Frage bezüglich der filter-Funktion
Sagen wir, ich habe eine Liste aus Karten
Mein code ist:
(def Person {:name Bob } ) (def Person2 {:name Eric } ) (def Person3 {:name Tim } ) (def mylist (Listen-Person Person2 Person3))
Wie würde ich mich über Filterung meiner Liste, so dass , zum Beispiel: ich möchte die Liste minus Person2 (also abzüglich der Karte, der :name
Eric)
Vielen Dank an alle mir helfen. Dies ist meine Letzte Frage, ich verspreche
InformationsquelleAutor | 2009-07-14
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu diesem Zweck ist es besser, verwenden Sie die 'entfernen' - Funktion. Es dauert eine Sequenz, und entfernt die Elemente, auf denen Sie das Prädikat liefert 'true'. Es ist im Grunde das Gegenteil von dem filter. Hier ist ein Beispiel dafür, und filter, um die Verwendung für die gleichen Zwecke, für die ich arbeitete bis über die REPL.
Wie Sie sehen können, zu entfernen, ist ein wenig sauberer, weil Sie nicht haben, zu verwenden, nicht=. Auch bei der Arbeit mit den Karten, die Sie nicht haben, verwenden Sie die " get " - Funktion, wenn Sie wollen, bis Sie wieder etwas besonderes, wenn ein Schlüssel nicht in der map. Wenn Sie wissen, der Schlüssel, die Sie suchen, werden in der Karte gibt es keinen Grund für die Verwendung von 'bekommen'. Viel Glück!
Angenommen, Sie haben so etwas wie dieses:
Dieser funktionieren würde:
user=> (filter (fn [person] (nicht= (person :name) "Eric")) mylist)
({:name "Bob"} {:name "Tim"})
oder über eine kompaktere syntax:
user=> (filter #(nicht= (% :name) "Eric") mylist)
({:name "Bob"} {:name "Tim"})