我正在尝试构建一组函数来比较句子。所以我写了一个名为split-to-sentences
的函数,它接受这样的输入:
"This is a sentence. And so is this. And this one too."
并返回:
["This is a sentence" "And so is this" "And this one too."]
我正在努力的是如何迭代这个向量并获得不是当前值的项目。我尝试使用drop
和remove
进行了尝试,但还没有弄明白。
我想我能做的一件事就是在循环中使用first
和rest
,并将conj
之前的值用于休息输出。
答案 0 :(得分:2)
只需使用过滤器:
(filter #(not= current-value %) sentences-vector)
答案 1 :(得分:2)
(remove #{current-value} sentences-vector)
答案 2 :(得分:0)
诀窍是将你的句子两次传递给reduce
函数......
(def sentences ["abcd" "efg" "hijk" "lmnop" "qrs" "tuv" "wx" "y&z"])
(reduce
(fn [[prev [curr & foll]] _]
(let [aren't-current-value (concat prev foll)]
(println aren't-current-value) ;use it here
[(conj prev curr) foll]))
[[] sentences]
sentences)
...一次看到以下的,一次迭代。
答案 3 :(得分:0)
我相信你可能想要这样的功能:
(defn without-each [x]
(map (fn [i] (concat (subvec x 0 i) (subvec x (inc i))))
(range (count x))))
像这样使用:
>>> (def x ["foo" "bar" "baz"])
>>> (without-each x)
==> (("bar" "baz") ("foo" "baz") ("foo" "bar"))
返回的元素是懒惰的连接,这就是它们不是向量的原因。这是所希望的,因为真矢量级联(例如(进入b))是O(n)。
因为subvec使用与原始序列共享,所以不应使用过多的内存。
答案 4 :(得分:0)