从 Clojure 持久哈希中获取未知密钥

Get unknown key from Clojure Persistent Hash

从 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 然后从 KeySeq 中拉出 key,但我很好奇是否有一种简单的方法可以通过一次函数调用来完成此操作.

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

(key (first {:a "test"})) 将为您获取地图中第一个条目的密钥,这是您想要做的吗?

您可以使用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)