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) }