【问题标题】:how to swap all pair of elements in deeply nested vector in clojure?如何在clojure中交换深度嵌套向量中的所有元素对?
【发布时间】:2016-05-27 21:09:01
【问题描述】:

说我有类似的东西

[[[[1 2] [3 4] [5 6]]] [[[7 8] [9 10]]] [[[2 4]]]]

我想交换最里面的对来制作它

[[[[2 1] [4 3] [6 5]]] [[[8 7] [10 9]]] [[[4 2]]]]

假设我在获取数据之前不知道深度,并且所有对都处于相同的深度级别。

实现此目的的惯用方法是什么?

【问题讨论】:

  • 你是怎么解决这个问题的?当您说“最里面”时,在这种情况下,您似乎是指所有这些。也许更多的测试用例会有所帮助?到目前为止,您尝试过什么?

标签: clojure clojurescript


【解决方案1】:

clojure.walk 将完成这项工作:

(require '[clojure.walk :as walk])

(defn pair? [s]
  (and (vector? s)
       (every? (complement vector?) s)
       (= (count s) 2)))

(defn swap-pairs [s]
  (walk/prewalk #(if (pair? %)
                   (vec (reverse %))
                   %)
                s))

您可能会想出更适合您的域的不同 pair? 谓词。

【讨论】:

    猜你喜欢
    • 2015-12-03
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多