【问题标题】:Scala: Add char after every char in List of StringsScala:在字符串列表中的每个字符之后添加字符
【发布时间】:2017-09-11 16:09:22
【问题描述】:

我有一个使用 Scala 无法完成的任务。我必须定义一个函数,该函数返回从作为参数接收的列表构造的字符串列表。对于元素中的每个字母,要添加下一个字符:

transformStrings(List("CHAT", "LIST", "ASK"))
//> res13: List[String] = List(CDHIABTU, LMIJSTT, ABSTKL)

到目前为止,我想我必须以某种方式映射列表,然后使用 foreach 或 for/yield 来遍历每个字符,但我不确定该怎么做。

【问题讨论】:

  • zZ 之后是什么?通过 ASCII 值,它应该分别是 {[。你需要它环绕吗?

标签: scala list foreach


【解决方案1】:

foldLeft怎么样,比如:

List("CHAT", "LIST", "ASK").map(_.foldLeft("")((a, b) => a + b + (b + 1).toChar))
>res0: List[String] = List(CDHIABTU, LMIJSTTU, ABSTKL)

说明:

  1. a减少值
  2. bString 中的下一个字符(如“CHAT”)
  3. (b+1) 表示next char ascii 编号
  4. toChar 会将 ascii number 转换为 Char
  5. 最后joinbnext charString

【讨论】:

  • 你能向 Scala 新手解释一下(b + 1) 部分的作用吗?那是字符增量发生的地方吗?如果是这样,那不是一个非常奇怪的结构吗?谢谢!
  • @patrick 每个字符都由一个数字表示,因为它是一个 ASCII 值——例如,在 Scala REPL 中,尝试输入 ('C'.toInt + 1).toChar,你会看到你得到 D,它有一个整数表示,正好比C 的值大一。
  • 哇,太疯狂了,谢谢!我看了up 并想知道这是否适用于所有 Unicode 字符?我觉得它不能为那些返回一个 Int ? (不适用于我,但可能是我的终端设置)
【解决方案2】:

你可以这样做:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多