对列表进行排序而不更改scala中的顺序

时间:2015-09-21 05:40:55

标签: scala

val a = List((2,5,1),(3,8,4), (5,4,3) ,(9,1,2))

我希望输出作为一个不同的列表,它按照排序顺序排列,基于列表中每个元组的中间元素,并且第一个&第三元组的顺序不应该改变。它就像只交换第二个元组。

预期答案是:

List((2,1,1), (3,4,4) , (5,5,3), (9,8,2))

2 个答案:

答案 0 :(得分:6)

zipunzip以及他们的变种是您这类事情的朋友。

val x = List((2,5,1),(3,8,4), (5,4,3) ,(9,1,2))
val y = x.unzip3 match {
  case (a,b,c) => (a, b.sorted,c).zipped.toList
}

答案 1 :(得分:3)

如下图所示,您可以单独对第二个项目进行排序并将它们压缩在一起

a.zip(a.map(_._2).sorted).map{ case((a,b,c), sortedB) => (a,sortedB,c)}
// res = List((2,1,1), (3,4,4), (5,5,3), (9,8,2))