【问题标题】:How do I filter a list of vectors in Clojure?如何在 Clojure 中过滤向量列表?
【发布时间】:2020-06-04 00:51:37
【问题描述】:

我是 Clojure 的新手,正在学习 Clojure 中各种数据结构的属性。在这里,我有一个向量列表如下:

(["1" "Christiano Ronaldo" "Portugal" "35"] 
 ["2" "Lionel Messi" "Argentina" "32"] 
 ["3" "Zinedine Zidane" "France" "47"])

其中每个向量的第一个元素是 id。如何根据 id 从列表中过滤掉单个向量?例如,id = 1 应该返回

["1" "Christiano Ronaldo" "Portugal" "35"]

我尝试在嵌套地图上做同样的事情:

(def footballers 
    [
        {:id 1 :name "Christiano Ronaldo" :country "Portugal" :age 35}
        {:id 2 :name "Lionel Messi" :country "Argentina" :age 32}
        {:id 3 :name "Zinedine Zidane" :country "France" :age 47}
    ]
)

并成功使用filter 函数

(filter #(= (:id %) 1) footballers)

结果:

({:id 1, :name "Christiano Ronaldo", :country "Portugal", :age 35})

如何使用filter 函数在向量列表中执行相同操作?

【问题讨论】:

  • 把你的元组变成一张地图我认为是个好主意 - 给事物命名是非常强大的,你甚至可以回答你的问题。

标签: list vector filter clojure


【解决方案1】:
(filterv #(= "1" (first %)) footballers)  ; or `filter`

   ;=> [["1" "Christiano Ronaldo" "Portugal" "35"]]  ; vector containing 1 vector

请参阅this list of documentation

【讨论】:

  • 这很快。我在那个过滤器函数的 pred 部分苦苦挣扎。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多