【问题标题】:scala nested for/yield generator to extract substringscala 嵌套 for/yield 生成器以提取子字符串
【发布时间】:2019-01-21 21:04:21
【问题描述】:

我是 scala 的新手。请温柔一点。我目前的问题是语法错误。 (但我的最终目标是从列表中的每个字符串中打印每组 3 个字符......现在我只是打印每个字符串的前 3 个字符)

def do_stuff():Unit = {
  val s =  List[String]("abc", "fds", "654444654")

  for {
    i <- s.indices
    r <- 0 to s(i).length by 3
    println(s(i).substring(0,3))
  } yield {s(i)}
}

do_stuff()

我收到此错误。它是语法相关的,但我不undersatnd ..

错误:(12, 18) ')' 预期但 '.'成立。 println(s(i).substring(0,3))

【问题讨论】:

  • 你能给我们一个输出例子吗?
  • 看看grouped - 它可能是你想要的。 for {r &lt;- s; t &lt;- r.grouped(3)} yield t(未经测试)

标签: scala for-loop syntax nested yield


【解决方案1】:

该代码无法编译,因为在 for-comprehension 中,您不能只放置一个 print 语句,您总是需要一个赋值,在这种情况下,一个虚拟的可以解决您的问题。

_ = println(s(i).substring(0,3))

编辑

如果你想在每个字符串中组合 3 个元素,你可以使用集合中的组合方法。

List("abc", "fds", "654444654").flatMap(_.combinations(3).toList)

【讨论】:

  • abc abc fds fds 654 654 654 654 这是我在 scala REPL 中得到的上述代码的输出。问题清楚地表明,给定列表的每个字符串中的所有 3 个字符子字符串都是必需的。不是吗?
  • 对不起,我专注于编译问题,没有意识到算法不起作用
  • 我认为这仍然给出了错误的 output.scala> List("abc", "fds", "654444654").flatMap(_.combinations(3).toList) res3: List[String] = List(abc, fds, 665, 664, 655, 654, 644, 554, 544, 444) 我认为他的意思应该是连续的子串。而且他想用来理解
  • @RAGHHURAAMM,你为什么抹掉你的答案?你说得有道理。
  • @user3600237,因为你的要求不一样,我删了。可能对您没有什么用,因为您担心编译错误的原因,您根据您对答案的评论做出。但我试图为您提供符合您要求的更正代码。
猜你喜欢
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
  • 2021-10-08
  • 2021-07-07
  • 2021-02-09
相关资源
最近更新 更多