代码之家  ›  专栏  ›  技术社区  ›  pmf

滑动窗口在seq上

  •  13
  • pmf  · 技术社区  · 15 年前

    在Clojure中,在一个(有限的,不太大的)seq上有一个滑动窗口的最好方式是什么?我应该用它吗 drop take 跟踪当前的索引,还是我错过了更好的方法?

    2 回复  |  直到 3 年前
        1
  •  28
  •   Jonas    15 年前

    我认为 partition

    user=> (partition 3 1 [3 1 4 1 5 9])
    ((3 1 4) (1 4 1) (4 1 5) (1 5 9))
    
        2
  •  3
  •   Timothy Pratley    15 年前

    如果要在windows上操作,也可以方便地使用map执行此操作:

    user=> (def a [3 1 4 1 5 9])
    user=> (map (partial apply +) (partition 3 1 a))
    (8 6 10 15)
    user=> (map + a (next a) (nnext a))
    (8 6 10 15)
    
        3
  •  0
  •   little-dude    5 年前

    我不知道 partition 我可以这样做,所以我用这种方式实现了它

    (defn sliding-window [seq length]
      (loop [result ()
             remaining seq]
        (let [chunk (take length remaining)]
          (if (< (count chunk) length)
            (reverse result)
            (recur (cons chunk result) (rest remaining))))))