我有一项任务,我在使用Scala时遇到了一些麻烦。我必须定义一个函数,该函数返回从作为参数接收的列表构造的字符串列表。对于元素中的每个字母,将添加下一个字符:
transformStrings(List("CHAT", "LIST", "ASK"))
//> res13: List[String] = List(CDHIABTU, LMIJSTT, ABSTKL)
到目前为止,我想我必须以某种方式映射List,然后使用foreach或for / yield来遍历每个char,但我不确定如何完成它。
答案 0 :(得分:3)
你可以这样做:
List("CHAT", "LIST", "ASK").map(s => s.flatMap(c => c.toString + (c+1).toChar))
// res9: List[String] = List(CDHIABTU, LMIJSTTU, ABSTKL)
或者:
List("CHAT", "LIST", "ASK").map(s => s.flatMap(c => Seq(c, (c+1).toChar)))
// res13: List[String] = List(CDHIABTU, LMIJSTTU, ABSTKL)
答案 1 :(得分:3)
foldLeft
如何:
List("CHAT", "LIST", "ASK").map(_.foldLeft("")((a, b) => a + b + (b + 1).toChar))
>res0: List[String] = List(CDHIABTU, LMIJSTTU, ABSTKL)
阐释:
a
是降低值 b
是String
中的 next char (如“CHAT”)(b+1)
表示next char
ascii号码 toChar
会将ascii number
转换为Char
join
b
和next char
至String