マップから値を使ってキーを抽出する必要があります。逆引き参照を自分で実装する以外にこれを行う方法はありますか?逆引き参照
逆引き参照
答えて
は
(some #(if (= (val %) your-val) (key %)) your-map)
あなたは2ライン機能と、本当に簡単にマップを逆にすることができます:
(defn reverse-map [m]
(into {} (map (fn [[a b]] [b a]) m)))
(def a {:a 1 :b 2 :c 3})
(reverse-map a)
=> {1 :a, 3 :c, 2 :b}
((reverse-map a) 1)
=> :a
注:すべての集中的な目的のために、マップ '{:a 1:b 1} 'は何が定義されていません。 – Jeremy
@Jeremy:厳密には定義されていないので、 '{1:a}'や '{1:b}'の逆参照を確実に取得します(ハッシュマップの内部順序に依存します)。しかし、価値が重複している場合は、おそらくこれに特別な扱いをしたいと思います。 – mikera
うん。私が意味したのは、それが依拠されるべきではないということでした。また、PersistentArrayMapsである小さなマップは、PersistentHashMapに強制されるまで*予測可能な*(必ずしも必要ではない)動作を持つことができます。しかし、再び、それは信頼されるべきではありません。 – Jeremy
に別のものを試してみてください。
(defn reverse-map [m]
(apply hash-map (mapcat reverse m)))
(defn reverse-lookup [m k]
(ffirst (filter (comp #{k} second) m)))
私はmap-invert
が正しいことだと思いますこれを行う方法。
;; Despite being in clojure.set, this has nothing to do with sets.
user=> (map-invert {:a 1, :b 2})
{2 :b, 1 :a}
;; If there are duplicate keys, one is chosen:
user=> (map-invert {:a 1, :b 1})
{1 :b}
;; I suspect it'd be unwise to depend on which key survives the clash.
あなたはClojureScriptを使用しているか、代わりの1以上を必要とする場合:)
(zipmap (vals m) (keys m))
あなたが鍵を保持したい場合は、それだけでマップを反転することをお勧めしますしかし、セット/リストなどの古いキーを収集する...
(defn map-inverse [m]
(reduce (fn [m' [k v]] (update m' v clojure.set/union #{k})) {} m))
(defn map-inverse [m]
(reduce (fn [m' [k v]] (update m' v conj k)) {} m))
- 1. ZSHバインドキー逆引き参照
- 2. Array値のArrayList逆引き参照
- 3. モデルメソッドのdjango逆引き参照
- 4. Boost.Lambda - 逆参照プレースホルダ
- 5. 逆参照できないベクトル
- 6. ブーストshared_ptr逆参照コスト
- 7. Python:\ number逆参照で
- 8. Appengine逆参照問題
- 9. ロックフリー参照カウント逆参照の競合状態を克服
- 10. NULLポインタの逆参照による参照の割り当て
- 11. リソースファイルの逆引き?
- 12. FlexJsonオブジェクト参照の逆シリアル化
- 13. ダブルポインタの逆参照の問題
- 14. 潜在的なNULL逆参照
- 15. 安い逆のDNSの参照
- 16. Javascript逆参照の後ろに数字
- 17. C++可能なnullポインタ逆参照
- 18. 式:文字列イテレータを逆参照できない
- 19. ベクトルイテレータは逆参照できません(ベクトル内のベクトル)
- 20. Vim regex:上書きされた逆参照?
- 21. forループ内で逆参照できないベクトルイテレータ
- 22. TextMateでの逆参照で置き換える問題
- 23. pthread_joinでポインタを逆参照するときのSegfault
- 24. Cコードで不完全な型への参照を逆参照する
- 25. スキーム逆引き関数
- 26. は参照で引数を渡すと
- 27. 空でない引数のメソッド参照?
- 28. #selectorの引数はプロパティを参照できません
- 29. この参照はメモリリークを引き起こしますか?
- 30. Entity Frameworkは循環参照を引き起こしますか?
私は何ですか? f 2以上のキーの値が同じですか?それらのうちの1つ、またはそれらのすべてが必要ですか? – ivant