3
我想查找序列中元素上次出现的位置。测试我想出的一些解决方案,如何用Clojure查找最后出现元素的位置?
user> (def numbers (repeatedly 100 #(rand-int 100)))
#'user/numbers
user> (time ((zipmap numbers (range)) 22))
"Elapsed time: 0.865193 msecs"
90
user> (time (last (keep-indexed #(if (= 22 %2) %1) numbers)))
"Elapsed time: 1.600483 msecs"
90
有没有一个更简洁的内置,这样做?
是的,但要注意'.lastIndexOf'将在'LazySeq实际工作',只要你正在寻找正确类型的元素:'(.lastIndexOf numbers(int 22))'。文字'22'将被视为'long',否则即使列表中随机出现'22'也不会被发现。 – 2013-03-03 02:59:00
@ A.Webb谢谢,我会更新我的答案。我想知道为什么它不直接在'LazySeq'上工作,但没有找到原因。 – ponzao 2013-03-03 12:46:39
谢谢你们俩! – georgek 2013-03-03 16:12:13