我想知道我是否遗漏了一些涉及矢量操作的基本内容.假设我有以下内容:
(def xs [9 10 11 12 13])
(def idx [0 2])
(def values [1 3])
Run Code Online (Sandbox Code Playgroud)
如果我想[1 10 3 12 13]在Matlab中返回向量,我会写xs(idx) = values.在Clojure中,有没有一种原始的方法来实现这一目标?现在我正在使用以下功能:
(defn xinto [seq idx val]
(apply assoc seq (interleave idx val)))
Run Code Online (Sandbox Code Playgroud)
谢谢.
这是一个有点尴尬,因为你已经分手了idx,并values为两个seqs,当他们在概念图索引到值.因此,如果您允许我对您的数据格式进行一些创意修改:
(def x [9 10 11 12 13])
(def changes {0 1, 2 3})
(defn xinto [v changes]
(reduce (fn [acc [k v]]
(assoc acc k v))
v
changes))
(xinto x changes) ;; gets the result you want
Run Code Online (Sandbox Code Playgroud)
如果您生成idx并values以某种奇怪的方式将它们组合在一起并不方便,您可以稍后将它们分组(map list idx values),然后使用我的xinto实现.
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |