2014-03-13 61 views
-1

的名單我想List("123", "456")轉換爲List('1', '2', '3', '4', '5', '6')。我目前的實現是:字符串轉換的列表,以字符數

def convert(strings: List[String]): List[Char] = { 
    val tmp = strings map (s => s.toList()) 
    tmp reduceLeft ((s1, s2) => s1 ::: s2) 
} 

它的工作原理,但要經過同一列表兩次(每串解析成列表,併合並所有列表)。是否有另一種方法可以只通過一次列表?我想我需要使用reduce,但不知道如何去做。

編輯:給予其獲得A類的對象,並返回某種列表的方法:我問這個問題,並希望使用reduce是因爲它涉及到的是我的工作問題的原因B類的對象,找到一個方法來變相A到B.因此清單列表,我在尋找一個答案是不特定字符串或字符:)

+4

對於真正的問題/目標,您需要'as.flatMap(_。getBs)'。這就是'flatMap'的用途。 ('as'是你的對象'A'的列表,'getBs'是進行轉換的方法(我假設這裏是'A'的方法;如果不是,就省略'_.')。 –

回答

3

如何:列表(「123 「,」456「)。flatten

scala> List("123", "456") 
res0: List[java.lang.String] = List(123, 456) 

scala> res0.flatten 
res1: List[Char] = List(1, 2, 3, 4, 5, 6) 

這是一個std。 tail-recursive解決方案:

scala> res0.foldLeft(List.empty[Char])((accumulator, next) => accumulator ::: next.toList) 
res2: List[Char] = List(1, 2, 3, 4, 5, 6) 
相關問題