Scala Seq删除行

时间:2017-04-20 09:33:57

标签: scala

我正在尝试执行以下代码。

  

val input = 0

scala> val list = Seq((1,2,3),(4,5,6),if(input == 1)(15,16,17),(7,8,9),if(input == 1)(10,11,12))

执行上面的代码后,我得到的结果低于结果。

  

list:Seq [Any] = List((1,2,3),(4,5,6),(),(7,8,9),())

但我需要以下输出 -

  

清单((1,2,3),(4,5,6),(7,8,9))

请帮忙。

3 个答案:

答案 0 :(得分:1)

选项1,将所有内容打包在Option中并调用flatten

val list = Seq(Option((1,2,3)),Option((4,5,6)), 
  if(input == 1) Option((15,16,17)) else None,
  Option((7,8,9)), 
  if(input == 1) Option((10,11,12)) else None).flatten

选项2,如果排序无关紧要,您可以只展平可选的那些:

val must = Seq((1,2,3),(4,5,6),(7,8,9))
val maybe = Seq(if(input == 1) Option((15,16,17)) else None,
  if(input == 1) Option((10,11,12)) else None).flatten

val list = must ++ maybe

答案 1 :(得分:0)

如果您已经有一个数组,并希望在结果

之后过滤空数组
list: Seq[Any] = List((1,2,3), (4,5,6), (), (7,8,9), ())

你可以简单地list.filter(_ != ())提供输出

List((1,2,3), (4,5,6), (7,8,9))

希望这有帮助

答案 2 :(得分:-1)

您的if(input == 1)(10,11,12)没有else

您可以自己尝试并做:

val input = 0 val x = if(input == 1)(10,11,12)

您会看到xAny。 (不是前面所说的Unit

虽然你想要做什么,但目前尚不清楚。