Clojure 如何在哈希映射集合中获取给定键的值并创建一个新集,其中该值就是新键

Clojure 如何在哈希映射集合中获取给定键的值并创建一个新集,其中该值就是新键,clojure,clojurescript,Clojure,Clojurescript,我肯定我弄坏了标题,这反映了我理解这一点的问题 如果我有 {:a-aye1:b-bee1}{:a-aye2:b-bee2} 一个人怎样才能得到 {:aye1 {:a "aye1" :b "bee1"} :aye2 {:a "aye2" :b "bee2"}} 我有一组散列映射,我想让其中的一个值成为键,如图所示,并删除该键中相同值的重复项。将密钥的值设置为新密钥,以便我可以轻松查找哈希映射。您需要分组方式: 请看,特别是学习 请注意,结果中的键是不变的字符串,而不是像原始问题那样的关键字。

我肯定我弄坏了标题,这反映了我理解这一点的问题

如果我有

{:a-aye1:b-bee1}{:a-aye2:b-bee2}

一个人怎样才能得到

{:aye1 {:a "aye1" :b "bee1"} 
 :aye2 {:a "aye2" :b "bee2"}}
我有一组散列映射,我想让其中的一个值成为键,如图所示,并删除该键中相同值的重复项。将密钥的值设置为新密钥,以便我可以轻松查找哈希映射。

您需要分组方式:

请看,特别是学习

请注意,结果中的键是不变的字符串,而不是像原始问题那样的关键字。如果要转换它们,可以使用或类似的方法

更新

也请。如果键入错误或其他缺少的键,它将引发异常,以便您可以检测错误,而不是静默返回nil:

您需要分组方式:

请看,特别是学习

请注意,结果中的键是不变的字符串,而不是像原始问题那样的关键字。如果要转换它们,可以使用或类似的方法

更新

也请。如果键入错误或其他缺少的键,它将引发异常,以便您可以检测错误,而不是静默返回nil:


在进行分组时,可以以任何方式变换密钥。例如,使用comp关键字:a:

def数据[{:a aye1:b bee1}{:a aye2:b bee2}] 按公司关键字分组:数据 => {:aye1[{:a aye1,:b bee1}], :aye2[{:a aye2,:b bee2}]
在进行分组时,可以以任何方式变换密钥。例如,使用comp关键字:a:

def数据[{:a aye1:b bee1}{:a aye2:b bee2}] 按公司关键字分组:数据 => {:aye1[{:a aye1,:b bee1}], :aye2[{:a aye2,:b bee2}]
如果假设地图列表中始终存在唯一的键,则可以通过关键字提取该键。这将为您提供一个地图,可通过以下值访问:a:


如果假设地图列表中始终存在唯一的键,则可以通过关键字提取该键。这将为您提供一个地图,可通过以下值访问:a:


指出map键之类的东西会将键转换成字符串是很好的,但我建议也提到,这样做可能不是个好主意。许多初学者试图使每个地图键成为关键字,但没有理由这样做。如果你的数据是一个字符串,那么它应该是一个字符串。谢谢你。。。我真的很感激这样的提示。。。我知道我正在研究各种反模式,我很想知道。虽然,目标是能够查找像:foo{:biz-yay:foo-bar}这样的值,这很方便。抓取函数。。。哇!我没听说过。绝对是工具带上的好东西!指出map键之类的东西会将键转换成字符串是很好的,但我建议也提到,这样做可能不是个好主意。许多初学者试图使每个地图键成为关键字,但没有理由这样做。如果你的数据是一个字符串,那么它应该是一个字符串。谢谢你。。。我真的很感激这样的提示。。。我知道我正在研究各种反模式,我很想知道。虽然,目标是能够查找像:foo{:biz-yay:foo-bar}这样的值,这很方便。抓取函数。。。哇!我没听说过。绝对是工具带上的好东西!这个的返回值就是我要寻找的。我意识到我在最初的帖子中忽略了提到我的意思是让它都变成一个散列集,以解决重复密钥的问题。。。不过我得玩这个。这个太简洁了。。。盯着它,惊讶不已。这就是我想要的回报值。我意识到我在最初的帖子中忽略了提到我的意思是让它都变成一个散列集,以解决重复密钥的问题。。。不过我得玩这个。这个太简洁了。。。盯着它,惊讶不已。
(def data [{:a "aye1" :b "bee1"} {:a "aye2" :b "bee2"}] )

(group-by :a data) => 
  {"aye1" [{:a "aye1", :b "bee1"}], 
   "aye2" [{:a "aye2", :b "bee2"}]}
(grab k m)
  "A fail-fast version of keyword/map lookup.  When invoked as (grab :the-key the-map),
   returns the value associated with :the-key as for (clojure.core/get the-map :the-key).
   Throws an Exception if :the-key is not present in the-map."

(def sidekicks {:batman "robin" :clark "lois"})
(grab :batman sidekicks)
;=> "robin"

(grab :spiderman sidekicks)
;=> IllegalArgumentException Key not present in map:
map : {:batman "robin", :clark "lois"}
keys: [:spiderman]
(into {} (map (juxt :a identity)) [{:a "aye1" :b "bee1"} {:a "aye2" :b "bee2"}])
; ⇒ {"aye1" {:a "aye1", :b "bee1"}, "aye2" {:a "aye2", :b "bee2"}}