2

私はclojureに比較的慣れていないので、次の問題に対する良い解決策は何だろうか.

私は2セットのシンボルを持っています:

v1:

q w e r

v2:

a s d f

そしてそれらは3番目のセットを構築するために使用されます

A:

qa qs qd qf
wa ws wd wf
ea es ed ef
ra rs rd rf

A のすべての要素は新しいシンボルですが、シングル サイン シンボルを取得できる必要があります。A に対してさまざまな操作を実行したいと考えています。たとえば、A の要素のすべての組み合わせの別のセットを構築したり、同等性をテストしたりします。

私はこれらの2つの解決策を思いつきました:

解決策 1:

(def A  {:qa [:q :a] :qs [:q :s] :qd [:q :d] :qf [:q :f]
         :wa [:w :a] :ws [:w :s] :wd [:w :d] :wf [:w :f]
         :ea [:e :a] :es [:e :s] :ed [:e :d] :ef [:e :f]
         :ra [:r :a] :rs [:r :s] :rd [:r :d] :rf [:r :f]})

(defn get-v1 [key] (first (key A)))

(defn get-v2 [key] (last (key A)))

=>(get-v1 :qa)
:q

解決策 2:

(def A [:qa :qs :qd :qf
        :wa :ws :wd :wf
        :ea :es :ed :ef
        :ra :rs :rd :rf])

(defn get-v1 [key] (keyword (str (first (name key)))))

(defn get-v2 [key] (keyword (str (last (name key)))))

=>(get-v2 :ws)
:s

実際、A の要素の順序も重要であるため、ソリューション 1 は不完全です。したがって、ソリューション 2 の A の定義が必要です。しかし、ソリューション 1 で sorted-map-by を作成するスマートな方法がわかりませんでした。

質問:

1. キーワードは正しい方法ですか?

2. もしそうなら、私の解決策のいずれかがそれを行うための良い方法ですか、それとももっと便利な方法がありますか? 私は解決策2に傾向があります。

4

1 に答える 1