如何在Scala中对文件的每一行进行排序?

时间:2019-06-17 04:47:46

标签: scala

我要对名称进行排序,姓氏在前,每行一个。名称将按照名字中的字符数从高到低的顺序排序。在每个长度的每组名称中,它们将按照姓氏中的字符数从高到低的顺序排列。

示例:

xxx xxxxx

xxx xxxxx

xxx xxxxxx

xxx xxxxxxx

xxxx xxx

xxxx xxxxx

xxxx xxxxxxx

我将名称附加到这样的列表列表中 列表(列表(Samantha,Sanderfur),列表(Kathlene,Lamonica),列表(Dixie,Crooker),列表(Domitila,Rutigliano))

,我想对列表列表进行排序。 Idk我应该如何对它进行排序,或者采用其他方法来解决此问题。

3 个答案:

答案 0 :(得分:2)

尝试以下代码:

val names = List(("Jack","Wilson"),("Alex","Jao"),("Jack","Wildorsowman"),
    ("Jack","Wiliamson"),("Alex","Joan"),("Alex","J."))

println(names.sortBy( x => (x._1.length(),x._2.length())))

结果:

List((Alex,J.), (Alex,Jao), (Alex,Joan), (Jack,Wilson), (Jack,Wiliamson), (Jack,Wildorsowman))

根据@GalNaor的建议进行了更新-

val names = `List(List("Jack","Wilson"),List("Alex","Jao"),List("Jack","Wildorsowman"),List("Jack","Wiliamson"),List("Alex","Joan"),List("Alex","J."))`

println(names.sortBy{ case List(x,y) => (x.length(),y.length())})

结果:

List(List(Alex, J.), List(Alex, Jao), List(Alex, Joan), List(Jack, Wilson), List(Jack, Wiliamson), List(Jack, Wildorsowman))

答案 1 :(得分:2)

这就是我要做的:

val input = List(List("aa","bbb"), List("a", "bb"), List("aaaa", "b"), List("aa", "bb"))

val tupleInput = input.map{case List(a,b) => (a,b)} 
// List((aa,bbb), (a,bb), (aaaa,b), (aa,bb))

val sortedMapValues = tupleInput.groupBy(_._1).mapValues(_.sorted) 
// Map(a -> List((a,bb)), aaaa -> List((aaaa,b)), aa -> List((aa,bb), (aa,bbb)))

val sortedMapKeys = scala.collection.immutable.TreeMap(sortedMapValues.toArray:_*) 
// Map(a -> List((a,bb)), aa -> List((aa,bb), (aa,bbb)), aaaa -> List((aaaa,b)))

val result = sortedMapKeys.map{case (_, a) => a}

// result = List(List((a,bb)), List((aa,bb), (aa,bbb)), List((aaaa,b)))

您可以here使用它

另一种单线解决方案可以像这样(here)-感谢@Anupam Kumar(需要做一些调整才能使其解决方案适合所需的输入):

val result = input.sortBy{case List(x,y) => (x.length(),y.length())}

感谢@jwvh使它更短。

答案 2 :(得分:0)

请帮我。我用sortwith对列表进行排序 这是我的代码

val s=v.sortWith((x,a)=>if(x(0).length==a(0).length){
  x(1).length<a(1).length
}
else{
  x(0).length<a(0).length
})
var z=""
for(i<- s){
  z=i(0)+" "+i(1)
  println(z)
}