我的問題是如何捕獲匹配發生的向量行的索引?在下面的代碼中,我做錯了什麼?如何捕獲「行」號碼
我有載體
(def v1 [[44 2 3 4 5][1 6 7 5 10][11 12 13 14 15]])
列索引的矢量和比較值
(def cmp-val1 11)
(def col-idx 0)
我想回到那裏比較返回true的行索引。與COL-IDX = 0和CMP-VAL1 = 11,I應該看到(第一行-NUM)返回圖2,並且它返回1.
(defn ret-match-row
"Return the index of the row, in which the cmp-val is found.
It is okay to increment 0."
[in-seq cmp-val col-idx]
(let [rn 0]
(let [row-num
(for [seq-row in-seq
:let [local-row-num (inc rn)]
:when (= cmp-val (nth seq-row col-idx nil))]
local-row-num)]
(first row-num))))
從LEIN REPL:
bene-csv.core=> (ret-match-row v1 cmp-val1 col-idx)
1
感謝您的答案。我明天會試一試。有趣的是,我已經看到更多的評論說循環..重複是非常低的水平,並使用序列,但循環..重複總是似乎是一個更合乎邏輯的方式來解決這樣的問題。不管怎樣,謝謝。 – octopusgrabbus
loop/recur在這裏效果很好,因爲你依賴於索引,你必須儘可能地放棄索引(這可能需要改變數據建模方式)以利用Clojure的FP風格。 – cgrand
@cgrand即使在這裏出色的答案,我基本上希望縮短解決方案,並循環..再發一次對我來說。設置的解決方案具有允許多重比較的優點,但是我必須放棄在我搜索的列中。對於獨特的數據庫密鑰來說沒問題,但我依賴用戶生成的保險報告,這些報告可能並可能包含「駕駛艙」錯誤的結果。 – octopusgrabbus