【问题标题】:Count elements in a vector of vectors in clojure计算clojure中向量向量中的元素
【发布时间】:2014-02-27 12:45:48
【问题描述】:

如果我有一个矩阵定义为:

(def m1 [[1 2 3][4 5 6][7 8 9]])

如何在clojure中计算向量中的向量。我知道 (count m1) 将返回 3,这是我在初始向量中拥有的向量数量,但我不记得如何计算内部向量(自从我不得不处理以来已经很长时间了任何 lisp 方言)。此外,我不想展平向量然后对其进行计数,因为我需要分别计算值(即,我想返回 3、3、3,因为每个内部向量都有 3 个元素。我猜的最后一个限制是我想在不使用地图的情况下立即执行此操作,因为我意识到我可以简单地执行此操作(地图计数 m1)。

【问题讨论】:

  • 你的意思是“我想在不使用地图的情况下立即执行此操作”?如果你想以更迂回、更复杂的方式做事,你可以编写一个递归函数来做同样的事情。
  • 这正是我想要做的。

标签: vector clojure count


【解决方案1】:

其实很简单,只要调用:

(map count m1)

或者,如果您想将结果也放在向量中:

(mapv count m1)

【讨论】:

  • 谢谢!我实际上做了更多的谷歌搜索,发现我可以用地图做到这一点,这就是为什么我在那个忍者编辑中折腾我说我想在没有地图的情况下做到这一点(是的,我意识到这意味着它会非常麻烦)
【解决方案2】:

您需要使用map。它将对向量中的每个元素应用计数并返回计数列表。

(def m1 [[1 2 3][4 5 6][7 8 9]])
(map count m1)
=> (3 3 3)

【讨论】:

  • 谢谢!正如我在另一条评论中所说,我在忍者编辑中说我不想使用地图。
【解决方案3】:

您的编辑:“我想在不使用地图的情况下执行此操作。”

(defn counts [vs]
  (loop [vs vs, cs []]
    (if (empty? vs)
      cs
      (recur (rest vs), (conj cs (count (first vs)))))))

【讨论】:

  • (reduce #(conj %1 (count %2)) [] [[1 2 3][4 5 6][7 8 9]])[3 3 3]
  • 如何使用这个功能?
【解决方案4】:

一个答案很好,但使用计数。假设不使用count也不使用map

((fn [lst] (循环 [l lst, n 0] (如果(空?l) n (recur (rest l) (inc n)))))'(1 2 3))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多