我要对名称进行排序,姓氏在前,每行一个。名称将按照名字中的字符数从高到低的顺序排序。在每个长度的每组名称中,它们将按照姓氏中的字符数从高到低的顺序排列。
示例:
我将名称附加到这样的列表列表中 列表(列表(Samantha,Sanderfur),列表(Kathlene,Lamonica),列表(Dixie,Crooker),列表(Domitila,Rutigliano))
,我想对列表列表进行排序。 Idk我应该如何对它进行排序,或者采用其他方法来解决此问题。
答案 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)
}