我试图根据条件附加到ListString,但列表显示为空
下面是简单的代码:
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)
}
}输出:
Printing i : t01354
Printing i : t015434
List()
Process finished with exit code 0发布于 2017-05-07 02:10:36
这一行i :: prim :: Nil创建了一个新的List[],但是新的List没有被保存(即分配给一个变量),所以它被丢弃了。prim从未改变过,也不可能是因为它是一个val。
如果只需要满足特定条件的元素的新List,则筛选列表。
val prim: List[String] = columnNames.filter(_.startsWith("t01"))
// prim: List[String] = List(t01354, t015434)发布于 2017-05-07 02:05:01
1)为什么我不能添加到列表中?
List是不可变的,您必须更改列表(称为ListBuffer)。
定义
scala> val list = scala.collection.mutable.ListBuffer[String]()
list: scala.collection.mutable.ListBuffer[String] = ListBuffer()添加元素
scala> list+="prayagupd"
res3: list.type = ListBuffer(prayagupd)
scala> list+="urayagppd"
res4: list.type = ListBuffer(prayagupd, urayagppd)打印列表
scala> list
res5: scala.collection.mutable.ListBuffer[String] = ListBuffer(prayagupd, urayagppd)2.在scala?中筛选列表
而且,在您的例子中,解决问题的最好方法是使用List#filter,而不需要使用for循环。
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)相关资源
发布于 2017-05-07 10:24:22
除了jwvh所解释的。注意,在Scala中,你通常会做你想做的事
val prim = columnNames.filter(_.startsWith("t01"))https://stackoverflow.com/questions/43827113
复制相似问题