【问题标题】:How to append elements to list in a for loop : Scala如何将元素附加到 for 循环中的列表:Scala
【发布时间】:2018-09-21 03:02:55
【问题描述】:

我想根据条件将元素列表附加到另一个列表。例如:找到下面的代码。

package test

object main {
 def main(args: Array[String]): Unit ={
   val a = List(1,2,3,4,5)
   val b= List[Int]()
   for(x <- a){
     if (x>3){
       b:+x
     }
   }
   println(b)
 }
}

当我执行这个时,我得到一个空列表。

【问题讨论】:

  • 你可以过滤。
  • 你能告诉我如何使用条件吗,我几乎没有其他条件需要使用循环。
  • 添加了下面的答案,您可以在过滤器中添加更多条件或添加另一个过滤器调用。
  • 推荐的方法是在你的例子中进行过滤,另见How to filter a list in Scala

标签: scala


【解决方案1】:

List 类在 Scala 中是不可变的,因此您无法向其添加元素。如果你真的需要一个可变列表,你可以使用MutableList

val a = List(1,2,3,4,5)
val b= MutableList[Int]()
for (x <- a) {
  if (x > 3) {
    b += x
  }
}
println(b)

但是,在像 Scala 这样的函数式语言中,最佳实践是使用不可变集合。使用filter 方法可以非常轻松地完成您的任务。

val a = List(1,2,3,4,5)
val b = a.filter(_ > 3)

【讨论】:

  • 您还需要 import scala.collection.mutable.MutableList 。默认不可用
【解决方案2】:

在 Scala 中 List 是一个不可变的集合,你不能添加它,但你可以通过应用过滤器创建另一个集合:

val a = List(1,2,3,4,5)
val b = a.filter(x => x > 3)

【讨论】:

    【解决方案3】:

    实际上,为了使其更通用,您可以使用制表方法在列表中预填所需的 n; 示例:

    val n = 5
    List.tabulate(5)(_ + 1).filter(_ > 3)
    

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      • 2015-04-27
      • 2014-06-10
      • 2020-09-02
      • 2020-04-25
      相关资源
      最近更新 更多