首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala :添加Scala列表

Scala :添加Scala列表
EN

Stack Overflow用户
提问于 2017-05-07 01:59:22
回答 3查看 143关注 0票数 0

我试图根据条件附加到ListString,但列表显示为空

下面是简单的代码:

代码语言:javascript
复制
object Mytester{

  def main(args : Array[String]): Unit = {
    val columnNames = List("t01354", "t03345", "t11858", "t1801566", "t180387685", "t015434")
    //println(columnNames)

    val prim = List[String]()

    for(i <- columnNames) {
      if(i.startsWith("t01"))
        println("Printing i : " + i)
        i :: prim :: Nil
    }

    println(prim)
  }
}

输出:

代码语言:javascript
复制
Printing i : t01354
Printing i : t015434
List()

Process finished with exit code 0
EN

回答 3

Stack Overflow用户

发布于 2017-05-07 02:10:36

这一行i :: prim :: Nil创建了一个新的List[],但是新的List没有被保存(即分配给一个变量),所以它被丢弃了。prim从未改变过,也不可能是因为它是一个val

如果只需要满足特定条件的元素的新List,则筛选列表。

代码语言:javascript
复制
val prim: List[String] = columnNames.filter(_.startsWith("t01"))
// prim: List[String] = List(t01354, t015434)
票数 3
EN

Stack Overflow用户

发布于 2017-05-07 02:05:01

1)为什么我不能添加到列表中?

List是不可变的,您必须更改列表(称为ListBuffer)。

定义

代码语言:javascript
复制
scala> val list = scala.collection.mutable.ListBuffer[String]()
list: scala.collection.mutable.ListBuffer[String] = ListBuffer()

添加元素

代码语言:javascript
复制
scala> list+="prayagupd"
res3: list.type = ListBuffer(prayagupd)

scala> list+="urayagppd"
res4: list.type = ListBuffer(prayagupd, urayagppd)

打印列表

代码语言:javascript
复制
scala> list
res5: scala.collection.mutable.ListBuffer[String] = ListBuffer(prayagupd, urayagppd)

2.在scala?中筛选列表

而且,在您的例子中,解决问题的最好方法是使用List#filter,而不需要使用for循环。

代码语言:javascript
复制
scala> val columnNames = List("t01354", "t03345", "t11858", "t1801566", "t180387685", "t015434")
columnNames: List[String] = List(t01354, t03345, t11858, t1801566, t180387685, t015434)

scala> val columnsStartingWithT01 = columnNames.filter(_.startsWith("t01"))
columnsStartingWithT01: List[String] = List(t01354, t015434)

相关资源

Add element to a list In Scala

filter a List according to multiple contains

票数 1
EN

Stack Overflow用户

发布于 2017-05-07 10:24:22

除了jwvh所解释的。注意,在Scala中,你通常会做你想做的事

代码语言:javascript
复制
val prim = columnNames.filter(_.startsWith("t01"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43827113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档