シーケンス内の n 番目ごとの要素に関数をマップする適切な方法は何ですか? のようなもの(map-every-nth fn coll n)
で、n 番目ごとの要素のみが変換された元のシーケンスを返します。たとえば、 (map-every-nth inc (range 16) 4) は (0 1 2 4 4 5 6 8 8 9 10 12 12 13 14 を返します)。 16)
2814 次
3 に答える
12
これを試して:
(defn map-every-nth [f coll n]
(map-indexed #(if (zero? (mod (inc %1) n)) (f %2) %2) coll))
(map-every-nth inc (range 16) 4)
> (0 1 2 4 4 5 6 8 8 9 10 12 12 13 14 16)
于 2012-04-26T02:23:09.167 に答える
1
これは、受け入れられている回答よりもシンプルでクリーンになることをお勧めします。
(defn map-every-nth [f coll n]
(map f (take-nth n coll)))
これは知っておくと便利です: http://clojuredocs.org/clojure_core/clojure.core/take-nth
于 2012-07-27T03:06:38.883 に答える