Ich bin ziemlich neu zu Clojure und nur einige Prüfungsfragen üben, um sich auf eine Abschlussprüfung vorzubereiten.Zählen Sie die Häufigkeit einer Zeichenfolge in der Karte in clojure
Ich versuche, die Häufigkeit aller Namen in einer Datei zu finden. Ich lese die Datei Zeile für Zeile und ich speichere jede Zeichenfolge, wenn sie ein bestimmtes Schlüsselwort in einer Karte enthält. Da ich keine Wiederholungen möchte, versuche ich klarzustellen, aber ich bekomme immer noch die sich wiederholenden Elemente.
(defn readFile []
(map (fn [line] (clojure.string/split line #";"))
(with-open [rdr (reader "C:/Users/Rohil's Computer/Desktop/textfile.txt")]
(doseq [[idx line] (map-indexed vector(line-seq rdr))]
(if(.contains line "2007")
(if(.contains line "May")
(if(not(.contains line "Batman"))
(map save [(nth(clojure.string/split line #";")3 (nth(clojure.string/split line #";")19)])
(distinct(map))
)
)
)
)
)
)
)
Hier ist meine Beispielausgabe: Ich mag die 2 Iron Man Elemente loszuwerden.
(May 2007 Spiderman)
Clojure2.clj:
(March 2007 Iron man)
Clojure2.clj:
(March 2007 Iron man)
Clojure2.clj:
(April 2007 Captain America)
Gibt es etwas, das ich vermisse?
Ohne alles wegzugeben, hier ist ein paar Orte zu verbessern: 1. 'distinct' nimmt eine Sammlung. Sie übergeben ihm die 'map'-Funktion, deshalb erhalten Sie nicht, was Sie hoffen. 2. Es ist unwahrscheinlich, dass die beste Antwort auf verschachtelte 'if'-Anweisungen besteht. Versuchen Sie, die Werte, die Sie testen möchten, in einen Vektor zu setzen und iterieren Sie diese dann gegen Ihre Funktion. 3. Überlegen Sie, ob Sie Ihre Funktion in kleinere Teile aufteilen. – jmargolisvt