gpt4 book ai didi

java - 从具有特定值的 clojure vector 中提取 HashMap 列表

转载 作者:行者123 更新时间:2023-12-01 22:06:05 24 4
gpt4 key购买 nike

我有一个包含 HashMap 的 Clojure vector 。这些 HashMap 本身不与任何键关联。但是所有这些 HashMap 都有一个共同的键 - 比方说 "ckey" 。我想提取那些 "ckey" 的 HashMap 值为 "test" .

数据实际上是解析后的json。像这样的事情:-

testdata :{
sample1 : "samplevalue1"
sample2 : "samplevalue2"
sample3 : {innersample3 : "innersamplevalue3"}
sample4 : "samplevalue4"
sample5 : [{moresample []
link {innersample5 : "innersamplevalue5"}
ckeydata [{ckey:"test" something: somethingValue something2: somethingValue2}]}
{moresample []
link {innersample5 : "innersamplevalue5"}
ckeydata [{ckey:"test1"something: somethingValue something2: somethingValue2}]}
{moresample []
link {innersample5 : "innersamplevalue5"}
ckeydata [ {ckey:"test2" something: somethingValue something2: somethingValue2}]}
{moresample []
link {innersample5 : "innersamplevalue5"}
ckeydata [ {ckey:"test" something: somethingValue something2: somethingValue2}]}]}

所以在这种情况下我想从 sample5 中提取 HashMap 谁的"ckeydata" key 有一个 vector ,其中包含一个具有 "ckey" 的 HashMap 。 "test" 的值.

Clojure 格式的数据:

testdata {
:sample1 "samplevalue1"
:sample2 "samplevalue2"
:sample3 {:innersample3 "innersamplevalue3"}
:sample4 "samplevalue4"
:sample5 [{:moresample []
:link {innersample5 "innersamplevalue5"}
:ckeydata [{:ckey:"test" :something: somethingValue something2 somethingValue2}]}
{:moresample []
:link {innersample5 "innersamplevalue5"}
:ckeydata [{:ckey "test1" :something "somethingValue" :something2 "somethingValue2"}]}
{:moresample []
:link {:innersample5 "innersamplevalue5"}
:ckeydata [ {:ckey "test2" :something "somethingValue" :something2 "somethingValue2"}]}
{:moresample []
:link {innersample5 : "innersamplevalue5"}
:ckeydata [ {:ckey "test" :something "somethingValue" :something2 "somethingValue2"}]}]}

注意:我不想使用很多过滤器并继续循环代码。

最佳答案

这应该有效:

(filter
(fn [{:keys [ckeydata]}]
(some (comp #{"test"} :ckey) ckeydata))
(:sample5 testdata))

这是一个相当密集的版本:

(filter
(fn [sample-map]
(some
(fn [element]
(= (:ckey element) "test"))
(:ckeydata sample-map)))
(:sample5 testdata))
<小时/>

如果 :ckeydata 始终只包含一个元素,请考虑:

(filter
(comp #{"test"} :ckey first :ckeydata)
(:sample5 testdata))

关于java - 从具有特定值的 clojure vector 中提取 HashMap 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32760788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com