从Clojure Persistent Hash获取未知密钥

时间:2016-06-07 17:46:15

标签: java clojure clojure-java-interop

从Clojure地图获取未知密钥的最佳方法是什么?我试过了 -

(key {:a "test"})

抛出这个 -

ClassCastException clojure.lang.PersistenArrayMap cannot be cast to java.util.Map$Entry

查看source code,这是有道理的 -

(defn key
  "Returns the key of the map entry."
  {:added "1.0" :static true}
  [^java.util.Map$Entry e]
  (. e (getKey)))

我也试过这个 -

(key (java.util.Map$Entry. {:a "test"}))

这引发了这个 -

CompilerException java.lang.IllegalArgumentException: No matching ctor found for interface java.util.Map$Entry

我知道我可以拨打keys,然后从key中提取KeySeq,但我很好奇是否有一种简单的方法可以通过一个函数调用来执行此操作。< / p>

就互操作而言,这是a related question。感谢您的投入。

2 个答案:

答案 0 :(得分:3)

name=$(cut -f4- -d/ --output-delimiter "" <<< "$var") echo "$name" 会告诉你地图中第一个条目的关键,那是你想要做的吗?

答案 1 :(得分:1)

您可以使用keyval来提取单个MapEntry的键和值部分。对于您的问题,使用keys函数(注意复数)可能更容易将地图中的所有键作为序列获取:

(keys {:a "test"} )
;=> (:a)

(keys {:a "test" :b "again"} )
;=> (:a :b)

; please remember that the keys do not have to be keywords
(keys {1 11 2 22} )
;=> (1 2)