5

(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)
4

2 に答える 2

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)
于 2013-01-23T06:39:40.157 に答える
-2

Uは1行でそれを行うことができます:

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

または2行で:

 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 }
于 2013-01-23T10:05:09.073 に答える