Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 附加可选元素的列表_Scala_Sequence_Option - Fatal编程技术网

Scala 附加可选元素的列表

Scala 附加可选元素的列表,scala,sequence,option,Scala,Sequence,Option,我需要创建一个序列,给定一个包含可选字符串列表的列表,将所有字符串串联起来,形成一个新列表。我的代码是这样的: res.foldLeft(Seq[Option[Seq[String]]]())((acc, v) => v match { case Some(x) => acc ++: Some(x) case None => acc }) 其中,res是包含可选列表元素的列表,例如: List(Some(Seq(foo)), Som

我需要创建一个序列,给定一个包含可选字符串列表的列表,将所有字符串串联起来,形成一个新列表。我的代码是这样的:

      res.foldLeft(Seq[Option[Seq[String]]]())((acc, v) => v match {
      case Some(x) => acc ++: Some(x)
      case None => acc
    })
其中,
res
是包含可选列表元素的列表,例如:

List(Some(Seq(foo)), Some(Seq(bar)), None, Some(Seq(baz, blah)))
我在符号
+:
处得到一个编译错误,表示:

  type mismatch; found : Iterable[Equals] required: Seq[Option[Seq[String]]]

我做错了什么?

我没有在这个框上安装scala,但是您可以尝试使用“map”函数从等式中删除选项,然后将seq列表展平为单个iterable

大概是这样的:

res.map.flatten
据我所知,您将得到一个包含“foo”、“bar”、“sez”、“bar”的Iterable

稍后我会检查一下,以测试语法是否正确,以及我所写的内容是否有效

干杯,亚伦

编辑:访问了我的scala终端,这可以:

res.map(s => s).flatten.flatten

我没有在这个框上安装scala,但是您可以尝试使用“map”函数删除等式中的选项,然后将seq列表展平为单个iterable

大概是这样的:

res.map.flatten
据我所知,您将得到一个包含“foo”、“bar”、“sez”、“bar”的Iterable

稍后我会检查一下,以测试语法是否正确,以及我所写的内容是否有效

干杯,亚伦

编辑:访问了我的scala终端,这可以:

res.map(s => s).flatten.flatten
你为什么不这样做呢:

res.flatten.flatten
第一个
展平
将去掉
并显示
选项
s,第二个将在
序列
上执行预期的展平操作

为什么不执行以下操作:

res.flatten.flatten

第一个
flatten
将去掉
None
s并显示
选项
s,第二个将在
Seq
s

中对
情况下的类型执行预期的展平操作一些(x)=>acc++:一些(x)
部分错误

+:
运算符需要类型为
Seq[Option[Seq[String]]]]
的参数,但您提供的是类型为
Option[Seq[String]]]
的参数


附言:如果你能准确说出你期望的结果。我可以改进这个答案,以帮助您编写所需的正确代码。

您在
案例中的键入Some(x)=>acc++:Some(x)
部分错误

+:
运算符需要类型为
Seq[Option[Seq[String]]]]
的参数,但您提供的是类型为
Option[Seq[String]]]
的参数


附言:如果你能准确说出你期望的结果。我可以改进此答案,以帮助您编写所需的正确代码。

1。您需要为
map
传递一个函数。2. <代码>地图(f)。展平可以替换为
flatMap(f)
。True。。事实上,我自己还在学习这门语言。来自@dimitrisli的最终答案是好的、简单的和优雅的。感谢您的评论,这有助于我的学习。
map(s=>s)
除了创建副本外,什么都不做,它可以被删除。1。您需要为
map
传递一个函数。2. <代码>地图(f)。展平可以替换为
flatMap(f)
。True。。事实上,我自己还在学习这门语言。来自@dimitrisli的最终答案是好的、简单的和优雅的。感谢您的评论,这有助于我的学习。
map(s=>s)
除了创建副本外,什么都不做,它可以被删除。