clojure - 计算集合中元素的连续出现次数

标签 clojure nested-loops find-occurrences

获得类似东西的惯用方法是什么?

(fn [coll] (function body) [1 0 -1 -1 -1 0 0 0 0 1 1 1 1 1 0 1 -1])
-> [1 1 3 2 1 4 3 2 1 5 4 3 2 1 1 1 1]

只能这样了

(fn [coll] 
  (loop [i 0 r []]
    (if (< i (count coll))
      (let [elem (nth coll i)
            cc (loop [j 1]
                 (if (< (+ i j) (dec (count coll)))
                   (let [nelem (nth coll (+ i j))]
                     (if (= elem nelem)
                       (recur (inc j))
                       j))
                   j))]
        (recur (inc i) (conj r cc)))
      r)))

最佳答案

针对我们认为的问题修改@noisesmith 的简洁解决方案:

(defn countdown-runs [s]
  (->> s
       (partition-by identity)
       (map count)
       (mapcat #(range % 0 -1))))

例如,

(countdown-runs [1 0 -1 -1 -1 0 0 0 0 1 1 1 1 1 0 1 -1])
; (1 1 3 2 1 4 3 2 1 5 4 3 2 1 1 1 1)

关于clojure - 计算集合中元素的连续出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23712800/

相关文章:

maven - 如何打包 leiningen 项目以重新编译并包含所有库? [对于没有互联网连接的用户]

Clojure 打印向量的内容

algorithm - Clojure 中的循环分配

oauth - 使用 bidi 包装资源处理程序

python - 嵌套列表中的嵌套循环

php - 计数字符并获取在 Php 或 SQL 中出现的百分比

c++ - 将循环系统转换为单个方程

c++ - 嵌套迭代器循环,为什么迭代器相等? -C++

javascript - 计算单词出现的次数,允许特殊字符和换行符

python - 使用函数将每个第二个单词替换为单词 'hello'