3 Stimmen

Was ist das Clojure-Äquivalent zu Ruby's select?

Ich möchte eine Liste/Auflistung aller Zahlen in einem Bereich zurückgeben, die ein Vielfaches von 3 oder 5 sind.

In Ruby würde ich Folgendes tun

(1..1000).select {|e| e % 3 == 0 || e % 5 == 0}

In Clojure, ich denke, ich könnte etwas wie tun...

(select (mod 5 ...x?) (range 0 1000))

5voto

dbyrne Punkte 55447
(filter #(or (zero? (mod % 3)) (zero? (mod % 5))) (range 1000))

5voto

bOR_ Punkte 381

Eine andere Möglichkeit besteht darin, die Lösung zu generieren, anstatt sie zu filtern:

(set (concat (range 0 1000 3) (range 0 1000 5)))

3voto

Rayne Punkte 29813
(filter #(or (= (mod % 5) 0) (= (mod % 3) 0)) (range 1 100))

ist die direkteste Übersetzung.

(for [x (range 1 100) :when (or (= (mod x 5) 0) (= (mod x 3) 0))] x)

ist eine weitere Möglichkeit, dies zu tun.

Anstelle von (= .. 0) können Sie auch die Funktion zero? verwenden. Hier ist die geänderte Lösung:

(filter #(or (zero? (mod % 5)) (zero? (mod % 3))) (range 1 100))

1voto

Jed Schneider Punkte 13363

Wie wäre es damit: http://gist.github.com/456486

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X