如何使用clojure从数组中获取第一个元素映射
我有一个结果数组如何使用clojure从数组中获取第一个元素映射,clojure,clojurescript,Clojure,Clojurescript,我有一个结果数组({:a one})。我想要一个结果,当我选择或给出:a时返回一个结果 我使用了vals,get in函数,但由于映射在列表中,因此它们不起作用。你能帮我怎么做吗 我需要返回给定键的值 而且 如果数据的格式是 ({:a “Favorite fruit", :measurements [{:a “fav game?", :b "x", :name “foot ball", :max 7.0, :min 0.0, :id “12345"}], :name “Frequency”})
({:a one})
。我想要一个结果,当我选择或给出:a
时返回一个结果
我使用了vals,get in
函数,但由于映射在列表中,因此它们不起作用。你能帮我怎么做吗
我需要返回给定键的值
而且
如果数据的格式是
({:a “Favorite fruit", :measurements [{:a “fav game?", :b "x",
:name “foot ball", :max 7.0, :min 0.0, :id “12345"}], :name “Frequency”})
我想选择:一个“fav游戏?”
:name“football”
和:min 0.0
谢谢试试这个:
clj.core=> (def data [ {:a 1} {:b 2} ] )
#'clj.core/data
clj.core=> (:a (first data))
1
clj.core=> (mapv :a data)
[1 nil]
试试这个:
clj.core=> (def data [ {:a 1} {:b 2} ] )
#'clj.core/data
clj.core=> (:a (first data))
1
clj.core=> (mapv :a data)
[1 nil]
如果您有一个结果向量(通常比列表更惯用),您可以使用get-in,但使用数字作为键。e、 g
(get-in [{:a "one"}] [0 :a]) ;=> "one"
如果您有一个结果向量(通常比列表更惯用),您可以使用get-in,但使用数字作为键。e、 g
(get-in [{:a "one"}] [0 :a]) ;=> "one"
列表理解
使用列表中任意数量的元素进行列表理解:
(for [x data :let [m (:measurements x)]] (map #(let [{:keys [a name min]} %] [a name min]) m))
详情:
- [x数据的
数据中每个元素的
设置:让[m(:测量值x)]
作为m
:测量值的符号
对于每个(映射#(让[{:keys[a name min]}%][a name min])m
获取密钥m
,并输出向量a name min
[a name min]
((["fav name?" "foot ball" 0.0]))
["fav name?" "foot ball" 0.0]
还是一个结果
直接使用:
详情:
apply(应用(comp-first:measurements)数据)
position,首先获取comp
然后是:measurements
元素first
从映射中获取键让[{:keys[a name min]}
,并输出向量a name min
[a name min]
((["fav name?" "foot ball" 0.0]))
["fav name?" "foot ball" 0.0]
列表理解
使用列表中任意数量的元素进行列表理解:
(for [x data :let [m (:measurements x)]] (map #(let [{:keys [a name min]} %] [a name min]) m))
详情:
- [x数据的
数据中每个元素的
设置:让[m(:测量值x)]
作为m
:测量值的符号
对于每个(映射#(让[{:keys[a name min]}%][a name min])m
获取密钥m
,并输出向量a name min
[a name min]
((["fav name?" "foot ball" 0.0]))
["fav name?" "foot ball" 0.0]
还是一个结果
直接使用:
详情:
apply(应用(comp-first:measurements)数据)
position,首先获取comp
然后是:measurements
元素first
从映射中获取键让[{:keys[a name min]}
,并输出向量a name min
[a name min]
((["fav name?" "foot ball" 0.0]))
["fav name?" "foot ball" 0.0]
要添加到@Marcs answer(以及一些额外的Clojure帮助),也有一些方法可以使用
从你举的例子开始
(def foobar
{:a "Favorite fruit", :measurements [{:a "fav game?", :b "x",
:name "foot ball", :max 7.0, :min 0.0, :id "12345"}], :name "Frequency"})
因为Clojure映射是关联的数据结构,所以我们可以进行关联的解构
;; associative destructuring
(let [{:keys [a]} foobar]
a)
;; also associative destructuring in the function params this time
((fn [{:keys [a]}]
a)
foobar)
要从包装在数组中的映射中获取单个值,我们可以使用顺序和关联的组合分解
(let [[{:keys [a]}] '({:a 'one})]
a)
对于您询问的关于获取:a:name:min
的最后一部分,我们可以使用另一个解构组合
(let [{a :a [{min :min}] :measurements name :name} foobar]
[a name min])
我链接到clojure.org的那篇文章对于解释更多细节来说是非常棒的!要添加到@Marcs answer(以及一些额外的clojure帮助),也有一些方法可以使用
从你举的例子开始
(def foobar
{:a "Favorite fruit", :measurements [{:a "fav game?", :b "x",
:name "foot ball", :max 7.0, :min 0.0, :id "12345"}], :name "Frequency"})
因为Clojure映射是关联的数据结构,所以我们可以进行关联的解构
;; associative destructuring
(let [{:keys [a]} foobar]
a)
;; also associative destructuring in the function params this time
((fn [{:keys [a]}]
a)
foobar)
要从包装在数组中的映射中获取单个值,我们可以使用顺序和关联的组合分解
(let [[{:keys [a]}] '({:a 'one})]
a)
对于您询问的关于获取:a:name:min
的最后一部分,我们可以使用另一个解构组合
(let [{a :a [{min :min}] :measurements name :name} foobar]
[a name min])
我链接到clojure.org的那篇文章对于解释更多细节来说是非常棒的!不确定你的序列是否有一个以上的地图,如上面的
数据。如果我遗漏了什么,请发布额外的例子。如果数据的形式是({:a“最喜欢的水果”,:measurements[{:a“fav game?”,:b“x”,:name“football”“,:max 7.0,:min 0.0,:id“12345”}],:name“Frequency”}),我想选择-:a“fav:name”football和:min 0.0?不,数据完全是这样的({:a“最喜欢的水果”,:measures[{:a“fav游戏?”,:b“x”,:name“football”,:max 7.0,:min 0.0,:id“12345”},:name“Frequency”})那么输出应该是什么呢?不确定您的序列是否有多个像上面的数据那样的映射。如果我遗漏了什么,请发布附加示例。如果数据的形式是({:a“最喜欢的水果”,:measures[{:a“fav game?”,:b“x”,:name“football”,:max 7.0,:min 0.0,:id“12345”,:name“Frequency”}),该怎么办我想选择-:a“fav:name”football和:min 0.0?不,数据完全是这样的({:a“最喜欢的水果”,:measures[{:a“fav游戏?”,:b“x”,:name“football”,:max 7.0,:min 0.0,:id“12345”},:name“Frequency”}),输出应该是什么?我实际使用了(map(juxt:a)(进入[]({:a“one”}))你能帮我回答下一个问题吗?我不知道你为什么在这种情况下使用juxt
;你想要一个嵌套向量吗?我实际使用了(map(juxt:a)(into[]({:a“one”))你能帮我回答下一个我刚才补充的问题吗?我不知道你为什么在这种情况下使用juxt
;你想要一个嵌套向量吗?非常感谢你…这对像我这样的初学者来说真的很有帮助,也很容易理解。如果你有很多这样的嵌套操作,一个类库或功能透镜可能也会很有帮助y使嵌套的Clojure代码更易于维护。非常感谢您……这对像我这样的初学者来说非常有用,也很容易理解。如果您有很多这样的嵌套操作,类库或函数透镜可能也很有用。它们使嵌套的Clojure代码更易于维护。