从Seq中删除元素

时间:2018-02-16 18:04:46

标签: scala

在这段代码中,给定一个结构<ion-footer> <ion-toolbar> <ion-buttons> <button ion-button color="dark" (click)="btn_reportlog()" start>Reportar Log</button> <button ion-button color="danger" (click)="btn_deletlog()" end>Excluir Log</button> </ion-buttons> </ion-toolbar> </ion-footer> 我试图摆脱每个序列中的元素“B”。为此,我的意图是用Seq[Seq[String]]替换字段,然后展平Seq。问题是flatten语句不能编译,为什么会这样,以及如何解决这个问题?

None

3 个答案:

答案 0 :(得分:2)

  1. 作业的结果是Unit。不是您想要的map()

  2. None的赞美是Some(),您需要使用它来保持结果类型一致。

  3. map()后跟flatten可以合并为flatMap()

  4. -

    Seq(Seq("A","B","C"),Seq("A","B","C")).map { rec =>
      rec.zipWithIndex.flatMap { case (field, i) =>
        if (field == "B")
          None
        else
          Some(field + i)
      }
    }
    //res0: Seq[Seq[String]] = List(List(A0, C2), List(A0, C2))
    

答案 1 :(得分:1)

我不确定你为什么要这么简单地做一些事情 一种错综复杂的方式。以下是从您的描述中推断出的代码:

username - start_time - endt_time
test     - 08:00:00   - 10:00:00

打印:

val withoutB = Seq(Seq("A","B","C"),Seq("A","B","C")).map{ _.filterNot(_ == "B")}
val flattened = withoutB.flatten

println(withoutB)
println(flattened)

希望有助于理解您的错误,我已强制您的代码段 编译,使用其他类型的所有中间结果对其进行注释,并将其打印出来:

List(List(A, C), List(A, C))
List(A, C, A, C)

打印:

val withNones: Seq[Seq[Any]] = Seq(Seq("A","B","C"),Seq("A","B","C")).map{ rec =>
  val rec2: Seq[Any] = rec.zipWithIndex.map{ case (field, i) =>
    if (field == "B")
        None
    else
        field + i
  }
  rec2
}

val flattenedWithNones: Seq[Any] = withNones.flatten

println(withNones)
println(flattenedWithNones)

但这很可能不是你想要的。

答案 2 :(得分:1)

下面:

scala> Seq(Seq("A","B","C"),Seq("A","B","C")).flatten.filterNot(_ == "B")
res0: Seq[String] = List(A, C, A, C)