2017-04-08 81 views
-4

我想编写一个Scala的功能,在像这样一个名单字母顺序排列的字符串:斯卡拉 - 排序字符串中的列表

sort(List("CAR", "MELON", "HOUSE")) 
//> res49: List[String] = List(ACR, ELMNO, EHOSU) 

的事情是,我为了做使用匹配/箱它。

我到了一个可能的解决方案最近的是这样的:

def sortMatchCase(xs: List[String]): List[String] = { 
    @tailrec 
    def sortMatchCaseAux(aux: String, ys: List[String]): String = ys match { 
     case Nil => "" 
     case x :: xs => sortMatchCaseAux(aux.sorted, xs) 
    } 
    sortMatchCase(xs) 
} 

然而,这是行不通的。

任何人都可以给我一个帮助吗?

+1

什么你的意思是“必须使用匹配/箱”吗?什么是确切的要求? – nmat

+2

这是一个实际问题还是训练练习,“你必须使用匹配/案例,因为这是教练要求的”? – radumanolescu

+1

如果两个答案中的任何一个(基本上只是包装库''sorted''方法,就像你的例子那样)满足你的任务的要求,我会感到惊讶。如果他们这样做,你只是被要求重新实现'map'。 –

回答

1

我supppose它只是发展与tailrec递归函数的练习(否则, list.map(_.sorted)会做到这一点)。如果是这样,像下面会做:

import scala.annotation.tailrec 

def sortMatchCase(list: List[String]): List[String] = { 
    @tailrec 
    def sortMatchCaseAux(aux: List[String], l: List[String]): List[String] = l match { 
    case Nil => aux 
    case x :: xs => sortMatchCaseAux(x.sorted :: aux, xs) 
    } 
    sortMatchCaseAux(Nil, list).reverse 
} 

scala> sortMatchCase(List("CAR", "MELON", "HOUSE")) 
res1: List[String] = List(ACR, ELMNO, EHOSU) 
+0

像radumanolescu的答案,这一个也帮助我,因为它使用匹配/案例。 谢谢。 –

2

你可能想每个字符串中的字符进行排序,像这样(然后琴弦呢?):

val list = List("CAR", "MELON", "HOUSE") 
    val sortedList = list.map(s => new String(s.toCharArray.sorted)).sorted 
    sortedList foreach println 
+0

在我的具体情况下,我不需要最后一个“val sortedList = list.map(s => new String(s.toCharArray.sorted))''而没有最后一个”.sorted“,但这回答了我所需要的。 即使它不使用匹配/情况我也可以使用地图。 谢谢。 –