Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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 - Fatal编程技术网

Scala:展平混合集合(或列表或数组)

Scala:展平混合集合(或列表或数组),scala,Scala,我有一个集合,它包含字符串的组合和字符串的子集,如下所示: val s = Set(brand1-_test, Set(brand-one, brand_one, brandone), brands-two, brandthree1, Set(brand-three2, brand_three2, brandthree2)) 我如何将其展平,以便得到一组扁平的弦s.flatte不适用于以下错误: error: No implicit view available from Object =&g

我有一个集合,它包含字符串的组合和字符串的子集,如下所示:

val s = Set(brand1-_test, Set(brand-one, brand_one, brandone), brands-two, brandthree1, Set(brand-three2, brand_three2, brandthree2))
我如何将其展平,以便得到一组扁平的弦
s.flatte
不适用于以下错误:

error: No implicit view available from Object => scala.collection.GenTraversableOnce[B]

flatMap也没有。我错过了什么?如果有区别的话,集合也可以很容易地合并子列表或子数组(它们是以前函数的结果)。

尝试将其放入REPL:

scala> val s = Set("s1", Set("s2", "s3"))
s: scala.collection.immutable.Set[Object] = Set(s1, Set(s2, s3))

由于您提供了两种类型(Set和String),因此scala推断出一种类型,该类型覆盖了这两种类型(在本例中为Object,但在大多数情况下可能为Any或AnyRef),它不是集合,因此无法展平。

尝试将其放在REPL中:

scala> val s = Set("s1", Set("s2", "s3"))
s: scala.collection.immutable.Set[Object] = Set(s1, Set(s2, s3))
 s.flatMap { case x:Iterable[_] => x; case y => Seq(y) }

由于您提供了两种类型(Set和String),因此scala推断出一种类型,该类型覆盖了这两种类型(在本例中为Object,但在大多数情况下可能为Any或AnyRef),它不是集合,因此无法展平。

您有一个
集合[Any]
。编译器不知道如何将其展平。但是每个集合中的项目都是相同的(字符串)-这没有区别吗?有什么办法可以把它弄平吗?它们不一样。有些元素是字符串,有些是集合。oooo,好吧,开始吧-感谢您的澄清。@Dima的解决方案很好地解决了这个问题!您有一个
集合[Any]
。编译器不知道如何将其展平。但是每个集合中的项目都是相同的(字符串)-这没有区别吗?有什么办法可以把它弄平吗?它们不一样。有些元素是字符串,有些是集合。oooo,好吧,开始吧-感谢您的澄清。@Dima的解决方案很好地解决了这个问题!
 s.flatMap { case x:Iterable[_] => x; case y => Seq(y) }