如何根据另一个矢量的值对一个矢量进行排序?如何根据clojure中另一个矢量的值排序一个矢量
说我有预定义的顺序:
(def order ["0M","6M","1Y","2Y","3Y"])
我有另一个矢量["0M","1Y","6M"]
(可以或可以不包含载体 “顺序” 的所有元件)
输出应该是["0M","6M","1Y"]
如何根据另一个矢量的值对一个矢量进行排序?如何根据clojure中另一个矢量的值排序一个矢量
说我有预定义的顺序:
(def order ["0M","6M","1Y","2Y","3Y"])
我有另一个矢量["0M","1Y","6M"]
(可以或可以不包含载体 “顺序” 的所有元件)
输出应该是["0M","6M","1Y"]
(def order ["0M","6M","1Y","2Y","3Y"])
(sort-by #(.indexOf order %) ["0M", "1Y", "6M"]) ; ("0M" "6M" "1Y")
请注意sort-by
会返回一个序列。如果您绝对需要矢量结果,则可以将输出提供给vec
。
谢谢。它工作..nice和漂亮:) – user1658944
这是一个很好的小解决方案,但它具有O(n^2.log n)的复杂性,因为每个'.indexOf'都是O(n)。如果你有一个非常大的集合,最好是建立一个objects-> index的hashmap,并使用它来做sort-by,而不是每次重新计算.indexOf。 – mikera
欢迎来到Stack Overflow!我们鼓励你[研究你的问题](http://stackoverflow.com/questions/how-to-ask)。如果你已经[尝试了某些东西](http://whathaveyoutried.com/),请将其添加到问题中 - 如果没有,请先研究并尝试您的问题,然后再回来。 – 2012-10-05 15:58:19