進入列表
回答
這確實你問:
(defn get-nth-in [init ks]
(reduce
(fn [a k]
(if (associative? a)
(get a k)
(nth a k)))
init
ks))
例如,
(-> '({:a "zero"} {:a "one"} {:a "two"})
(get-nth-in [1 :a]))
;"one"
和
(-> '({:a ("zero" 0)} {:a ("one" 1)} {:a ("two" 2)})
(get-nth-in [1 :a 0]))
;"one"
個額外'
是你已經得到擴展到(quote ...)
:
(-> '({:a '("zero" 0)} {:a '("one" 1)} {:a '("two" 2)})
(get-nth-in [1 :a 0]))
;quote
不是你想要的,我想。
Yup!我搞砸了這個例子,但這個功能正是我所期待的。謝謝! – user12341234
進入的第一個參數應該是一張地圖。
你必須弄清楚你的序列的功能,使用最後一個,第一個,過濾器或一些例如獲取該元素第一
例如,你可以使用(:a (last data))
第一個參數不需要映射,例如它可以是一個向量。我更新了我的問題以打破您的示例解決方案。 – user12341234
這就是爲什麼我說你必須弄清楚你的序列的特徵,如果你願意使用索引,像這樣做'( - >(vec'({:a「zero」} {:a「one」}) )) (get-in [1:a]))'然而,在向量中使用索引並不是一個完美的方法 – tony
A post just yesterday在懶惰列表和懶惰地圖(來自clojure/data.xml)方面存在問題。一個答案是使用該功能與普通的載體只需更換懶位&地圖:由於計算出的數據結構只使用矢量&地圖
(defn unlazy
[coll]
(let [unlazy-item (fn [item]
(cond
(sequential? item) (vec item)
(map? item) (into {} item)
:else item))
result (postwalk unlazy-item coll)
]
result))
,它爲你的榜樣與get-in
:
(let [l2 '({:a ("zero" 0)} {:a ("one" 1)} {:a ("two" 2)})
e2 (unlazy l2) ]
(is= l2 e2)
(is= "one" (get-in e2 [1 :a 0] l2))
)
你可以找到unlazy
功能in the Tupelo library.
在我的特殊情況下,unlazying非常耗時,所以對我來說,接受的答案仍然是可取的,但這仍然是一個很好的功能,可以保持在一個下雨天。 – user12341234
- 1. BeautifulSoup進入列表
- 2. Collectors.grouping進入對象列表?
- 3. ResultSet進入Popup列表
- 4. 嵌入式列表縮進
- 5. C#如何投入列表進入列表<customClass>
- 6. 頻道列表進入表[R
- 7. Idiorm /巴黎 - 進入結表中的列
- 8. 電話簿 - 進入班級列表
- 9. 進入裏面另一個列表
- 10. 拆分列表進入新的名單
- 11. 進入陣列的成表PHP
- 12. 對輸入列表進行排序
- 13. 進度條和mapply(輸入爲列表)
- 14. 只允許批註進入列表
- 15. Cusorfetch錯誤 - 進入列表太多
- 16. 插入產品進入表在相鄰的列表模式
- 17. 切片Python列表進入新的Python列表
- 18. 分組列表進入的條件下嵌套列表 - Python的
- 19. swiftyJSON進入陣列
- 20. 當新進程進入時自動刷新列表視圖
- 21. foreach進入mysql表
- 22. 查詢表vs進入表
- 23. 加入多個列表進入函數輸出python
- 24. 加入名單的名單「colums」進入名單列表的「行」
- 25. 取消有序列表進入新列第三個項目後
- 26. Python - 寫入列表的列表列表
- 27. 的Java 8個Lambda表達式組列表進入地圖
- 28. 從表單直接進入MailChimp列表中的數據
- 29. 重新進入數據表中的數據列表
- 30. Java進程列表
順便說一句,SO不會讓我發佈這個問題,直到我在標題中的'get-in'中取代G。這似乎是一個不好的功能...... – user12341234