我有以下结构:
(def m [[120 2] [123 88] [234 77]])
以及值
(def z 10)
我想要访问较小向量(在m
内(内的所有第二元素,并将它们乘以z
,然后将结果与向量的第一元素一起存储。
即计算(* secondvectorelement z)
结果看起来像[120 resultofcalculation]
到目前为止,我已经尝试过:
(map #(* (second m) z ))
但我被困在这个问题上了。TIA。
您可以使用带有析构函数的for
列表综合:
(for [[fst snd] m] [fst (* snd z)])
或者使用map
和update
功能的另一种方法:
(map #(update % 1 * z) m)
user=> (map (fn [v] [(first v) (* z (second v))]) m)
([120 20] [123 880] [234 770])
试试这个:
(map #(vector (first %) (* (second %) z)) m)
在我看来,没有必要定义z,所以:
(map #(vector (first %) (* (second %) 10)) m)
编辑:我更喜欢@erdos的答案,尽管
略有不同的方法:
(conj [] (apply min (map #(first %) m)) (apply * (conj (map #(second %) m) z)))
如果我们将上述应用于OP的数据,我们就会得到
[120 135520]