我试图根据条件附加到List [String]但是List显示为空
以下是简单代码:
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
答案 0 :(得分:3)
这一行i :: prim :: Nil
创建了一个新的List[]
但新的List
未保存(即分配给变量),因此它被丢弃。 prim
永远不会改变,因为它是val
而无法改变。
如果您只想要一个满足特定条件的新List
元素,请过滤该列表。
val prim: List[String] = columnNames.filter(_.startsWith("t01"))
// prim: List[String] = List(t01354, t015434)
答案 1 :(得分:1)
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)
相关资源