當我遍歷載體,試劑,像這樣:如何獲得索引項試劑
(for [item ["rattata" "pidgey" "spearow"]]
[:li item])])
我想獲得一個特定項目的指標 - 這樣的:
[:li item index]
我不是在問一般clojure'for',因爲另一種迭代vector的方式也會讓我滿意。
當我遍歷載體,試劑,像這樣:如何獲得索引項試劑
(for [item ["rattata" "pidgey" "spearow"]]
[:li item])])
我想獲得一個特定項目的指標 - 這樣的:
[:li item index]
我不是在問一般clojure'for',因爲另一種迭代vector的方式也會讓我滿意。
這實際上是一個普通的Clojure問題,而不是特定於試劑,但有幾種方法可以做到這一點。
你可以用一些類似的做法到您當前密碼一樣
(def items ["rattata" "pidgey" "spearow"])
(for [index (range items)]
[:li (get items index) index])])
你也可以使用map-indexed
(doall (map-indexed (fn [index item] [:li index item]) items))
的doall在這種情況下是試劑,如map
和朋友返回懶惰可能會干擾試劑的列表(如果忘記它,它會向控制檯發出警告)。
我問試劑,因爲在他們的頁面上的例子中的所有迭代都使用'for'。 其實我會發現他們更可讀'地圖'或'地圖索引',它的工作原理,所以我想知道他們爲什麼''爲'。對Clojure來說還是很新的,我恐怕在這裏錯過了一些東西。 –
經過一番調查: map-indexed是好的,但沒有實例化反應組件,並且不允許在函數內部取消引用原子。 與doall一起使用時,它可讓您解除引用原子,但仍不會創建組件。 因爲是要走的路,所以認爲它應該是[index(range(count items))] –
另一個不錯的選擇是map(map-indexed(fn [index item]){{:key index} [component index item] )項目)' –
您也可以將地圖索引與循環:
(for [[index item] (map-indexed vector items)]
[:li item index])])
; vector function is a shorthand:
(for [[index item] (map-indexed (fn [index item] [index item]) items)]
[:li item index])])
'地圖indexed'或'map'超過兩集,其中一人是一個範圍 –
感謝。 那麼是否有任何理由在這種情況下使用'for'? 地圖看起來更簡潔: '(圖兒童組件的功能集)' 對比: '(對[項收藏] (兒童組件的功能項))' –