2012-09-10 112 views
1

如何根据另一个矢量的值对一个矢量进行排序?如何根据clojure中另一个矢量的值排序一个矢量

说我有预定义的顺序:

(def order ["0M","6M","1Y","2Y","3Y"]) 

我有另一个矢量["0M","1Y","6M"](可以或可以不包含载体 “顺序” 的所有元件)

输出应该是["0M","6M","1Y"]

+0

欢迎来到Stack Overflow!我们鼓励你[研究你的问题](http://stackoverflow.com/questions/how-to-ask)。如果你已经[尝试了某些东西](http://whathaveyoutried.com/),请将其添加到问题中 - 如果没有,请先研究并尝试您的问题,然后再回来。 – 2012-10-05 15:58:19

回答

4
(def order ["0M","6M","1Y","2Y","3Y"]) 

(sort-by #(.indexOf order %) ["0M", "1Y", "6M"]) ; ("0M" "6M" "1Y") 

请注意sort-by会返回一个序列。如果您绝对需要矢量结果,则可以将输出提供给vec

+0

谢谢。它工作..nice和漂亮:) – user1658944

+0

这是一个很好的小解决方案,但它具有O(n^2.log n)的复杂性,因为每个'.indexOf'都是O(n)。如果你有一个非常大的集合,最好是建立一个objects-> index的hashmap,并使用它来做sort-by,而不是每次重新计算.indexOf。 – mikera

相关问题