2017-09-01 13 views
2

例:Clojure Spectre:特定の値を持つマップキーを見つける方法は?マップ内

{"test-1" 23, 
"test-2" 456, 
"test-3" 23} 

23を持つキーを見つける方法は?

+0

この入力には幽霊が必要ですか?深く入れ子構造ではありません。 –

+2

よく分かりにくい例もありますし、幽霊なしで簡単に行うこともできますが、多くの些細なデータ構造と似ていることも同じです。しかし、質問そのものは明確なカットであり、もしOPからのeffordの表示があるだけであれば、 – cfrick

答えて

2

あなたは幽霊を使って何かを検索する場合、亡霊/を選択を使用することをお勧めします。

(use 'com.rpl.specter)  

(select [ALL #(= (second %) 23) FIRST] 
    {"test-1" 23, 
    "test-2" 456, 
    "test-3" 23}) 
+0

これはまさに私が期待していて望んでいたソリューションの一種です!はるかに優雅な他の人。 – sumek

6

私はあなたがそれを行うには幽霊は必要ないと思うだけで、値でフィルタリングします。すなわち:

(->> {:key-1 10 
     :key-2 20 
     :key-3 10} 
     (filter (fn [[k v]] (= v 10))) 
     (map first)) 
==> [:key-1 :key-3] 

スペクターと解決策は以下のとおりです。

(keys (specter/setval [specter/MAP-VALS #(not= 10 %)] 
         specter/NONE 
         {:key-1 10 
         :key-2 20 
         :key-3 10})) 
+1

実際には 'seq'は必要ありません。なぜなら、filterは入力を続けるからです。 –

+0

はい、あなたは正しいです –

関連する問題