2017-04-08 37 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「,但這回答了我所需要的。 即使它不使用匹配/情況我也可以使用地圖。 謝謝。 –