在Python中我可以这样做:
in_dd = {"aaa": 1, "bbb": 7, "zzz": 3, "hhh": 9, "ggg": 10, "ccc": 3}
out_ll = ['ggg', 'hhh', 'bbb', 'aaa', 'ccc', 'zzz']
所以,我想让键按值降序排序同时让键按升序排序考虑到排序值
如何在Scala中实现?
在Scala中,我知道我可以这样做:val m = Map("aaa" -> 3, "bbb" -> 7, "zzz" -> 3, "hhh" -> 9, "ggg" -> 10, "ccc" -> 3)
m.toSeq.sortWith(_._2 > _._2)
但是我不知道如何按两种情况排序。
编辑:
我也尝试过这样的方法,但它没有返回期望的结果:
m.toSeq.sortWith((x,y) => x._2 > y._2 && x._1 < y._1).map(_.1)
List((ggg,10), (hhh,9), (bbb,7), (ccc,3), (zzz,3), (aaa,3))
注意应为aaa,ccc,zzz
在scala中可以使用:
m.toSeq.sortBy(a => (a._2, a._1) )(Ordering.Tuple2(Ordering.Int.reverse, Ordering.String.reverse))
对于List((ggg,10), (hhh,9), (bbb,7), (zzz,3), (ccc,3), (aaa,3))
和
m.toSeq.sortBy(a => (-a._2, a._1) )
forList((ggg,10), (hhh,9), (bbb,7), (aaa,3), (ccc,3), (zzz,3))