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))
答案 0 :(得分:6)
zip
和unzip
以及他们的变种是您这类事情的朋友。
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))