4

Clojureの簡単な初心者の質問...

Clojureベクトルに奇数の要素がある場合、「中間」値を抽出するにはどうすればよいですか?私はこれをしばらく見ていて、それを行う方法を理解することができません!

いくつかの例:

  • (middle-value [0])戻る必要があります[0]
  • (middle-value [0 1 2])戻る必要があります[1]
  • (middle-value [0 1 :abc 3 4])戻る必要があります[:abc]
  • (middle-value [0 1 2 "test" 4 5 6])戻る必要があります["test"]
4

3 に答える 3

7

ミドルインデックスを計算してアクセスするのはどうですか?

(defn middle-value [vect]
  (when-not (empty? vect)
    (vect (quot (count vect) 2))))
于 2013-03-25T12:10:39.513 に答える
5

やや非効率的ですが楽しい実装(具体的なベクトルの代わりにシーケンスの抽象化で機能します):

(defn middle [[fst & rst]]
  (if-not rst fst
    (recur (butlast rst))))

nil要素の数が偶数の場合に戻ります。

面白くはありませんが、より効率的です。

(nth v (quot (count v) 2))

ここvで、はベクトルです。

于 2013-03-25T14:53:59.640 に答える
1

ベクトル内のアイテムの数を取得し、半分にして、結果をフロア化し、そのインデックスでアイテムを取得します。ベクトルを仮定するとv

(get v (floor (/ (count v) 2)))

残念ながら、floorは含まれていません。clojure.coreそのために別のライブラリを取得するか、に直接アクセスする必要がありますjava.lang.Math.floor

もちろん、このコードは偶数カウントのベクトルについては何もしませんが、すでにそれらを処理できると思います。

于 2013-03-25T12:09:38.967 に答える