【问题标题】:Scala Seq delete rowScala Seq 删除行
【发布时间】:2017-04-20 09:33:57
【问题描述】:

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

val 输入 = 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))

执行上述代码后,我得到以下结果。

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

但我需要下面的输出 -

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

请帮忙。

【问题讨论】:

    标签: scala


    【解决方案1】:

    选项 1,将所有内容封装在 Options 中并调用 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
    

    【讨论】:

      【解决方案2】:

      如果你已经有一个数组并且想要在结果之后过滤空数组

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

      希望对你有帮助

      【讨论】:

        【解决方案3】:

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

        您可以自己尝试并做:

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

        您会看到x 将是Any。 (不是前面所说的Unit

        虽然不清楚你要做什么。

        【讨论】:

        • x 的类型是 Any,而不是 Unit。隐式添加了else () 语句,因此它采用Tuple3[Int, Int, Int]Unit 类型的最小上限,即Any
        猜你喜欢
        • 2018-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 1970-01-01
        相关资源
        最近更新 更多