Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用clojure从数组中获取第一个元素映射_Clojure_Clojurescript - Fatal编程技术网

如何使用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]
还是一个结果 直接使用:

详情:

  • (应用(comp-first:measurements)数据)
    apply
    comp
    position,首先获取
    :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]
还是一个结果 直接使用:

详情:

  • (应用(comp-first:measurements)数据)
    apply
    comp
    position,首先获取
    :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代码更易于维护。