Scala排序列表基于第二个属性,然后是第一个

pri*_*sia 4 sorting scala tuples list

我希望首先根据长度排序包含(word,word.length)的列表,然后按字母顺序排序.所以给出:"I am a girl"输出应该是a:1, I:1, am:2, girl:4 我有下面的代码片段,但不适用于所有的例子

val lengths = words.map(x => x.length)
val wordPairs = words.zip(lengths).toList
val mapwords = wordPairs.sort (_._2 < _._2).sortBy(_._1)
Run Code Online (Sandbox Code Playgroud)

Ser*_*nko 12

你可以按元组排序:

scala>  val words = "I am a girl".split(" ")
words: Array[java.lang.String] = Array(I, am, a, girl)

scala>  words.sortBy(w => w.length -> w)
res0: Array[java.lang.String] = Array(I, a, am, girl)

scala>  words.sortBy(w => w.length -> w.toLowerCase)
res1: Array[java.lang.String] = Array(a, I, am, girl)
Run Code Online (Sandbox Code Playgroud)

  • +1,你每天都学到东西.在文档中查找之后,它的工作原理是因为`Ordering`对象为元组提供了字典顺序(参见implicits`Ordering.Tuple*`) (4认同)