繁体   English   中英

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

[英]Scala sort list based on second attribute and then first

我希望首先根据长度排序包含(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)

你可以按元组排序:

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)

你可以在一行中做到这一点:

 "I am a girl".toLowerCase.split(" ").map(x => (x,x.length)).sortWith { (x: (String,Int), y: (String,Int)) => x._1 < y._1 }

或者分为两行:

 val wordPairs = "I am a girl".split(" ").map(x => (x,x.length))
 val result = wordPairs.toLowerCase.sortWith { (x: (String,Int), y: (String,Int)) => x._1 < y._1 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM