如何根据另一个ListBuffer订购ListBuffer

时间:2016-06-07 17:28:30

标签: scala

我有两个HttpContext.Current.Session["MyCustomID"] = null; 个对象:

ListBuffer

两者的长度相同。我想按照val o1 = new ListBuffer[String] val o2 = new ListBuffer[Double] 值按降序排序o1。这就是我试图解决的问题:

o2

首先,我不知道如何根据// order `o2` val ordered = o2.sorted(Ordering[Double].reverse) // get indices val ind = ordered.indices // reorganize `o1` according to `ind` 有效地重新组织o1。其次我想知道是否存在更好的方法(可能使用map,flatMap ......)。 也许保持单个数据结构而不是有两个ListBuffer是有意义的。?

2 个答案:

答案 0 :(得分:4)

如果你想知道事情是如何移动的,你需要跟踪指标:

val o3 = o2.zipWithIndex.sortBy(_._1)

然后您可以按顺序获取o1的元素:

o3.map(e=>o1(e._2))  //> res0: ListBuffer(a, c, b)

但是如果你要这样做,你可以跳过一步,在排序之前加入o1的元素:

(o2 zip o1).sortBy(_._1).map(_._2)  //> res1: ListBuffer(a, c, b)

但是如果o1o2的元素始终处于锁定状态,那么是的,维护单个数据结构对我来说是有意义的

答案 1 :(得分:2)

像这样的事情:

 (o1 zip o2 sortBy(-_._2) unzip)._1