【发布时间】:2015-11-27 06:53:23
【问题描述】:
新手问题:
如何在其中包含最大值的第一个实例处拆分数字向量?
所以,从这个[1 2 3 4 5 4 3 2 1],得到[1 2 3 4 5] [4 3 2 1]。
我的做法似乎过于复杂:
(def up5 [1 2 3 4 5 4 3 2 1])
(split-at (inc (.indexOf up5 (apply max up5))) up5) ; => [1 2 3 4 5] [4 3 2 1]
这看起来有点尴尬吗?例如使用定义的向量三次。而我们需要使用Java来获取索引吗?
什么是更好、更惯用或更高效的方式?
谢谢。
【问题讨论】:
-
使用
reduce-kv可以提高性能,以避免.indexOf调用。但它比你的版本还要长。 -
输入总是一个向量吗?您是否要求结果为 seq/vector/whatever?
-
我认为这无关紧要。无论如何,除了试图改进之外,我没有将这段代码用于任何目的......
-
@Mallory-Erik 我太关心 performant 部分,显然你不是在寻找死性能。 :D tnoda 的解决方案已经足够惯用了。
-
@Andre
reduce-kv比.indexOf快吗?
标签: clojure