在scala中更改列表类型的最佳方法

时间:2010-08-04 23:42:50

标签: arrays list scala functional-programming copy

我在scala中有一个名为l:List [AType]的列表,我想将其更改为list [String]。

这听起来像是一种非常肮脏,效率低下的方法,但我不太确定这种方法的最佳方法。我的代码是:

var result = new Array[String]("a","b")
l foreach { case a => result = result :+ (a.toString().toUpperCase()); }
result toList

我不确定这是否是我的错误所在,因为它没有给我任何东西,即使我在循环中放置了一个print语句,它甚至都不打印任何东西。

所以我决定将其改为更加迫切的方式:

for(i <- 0 to l.length) {
    result.update(i, l(i).toString)
}

这次我看到在循环内部打印时我想看到的东西,但最后程序因IndexOutOfBound错误而崩溃。

有没有更有效率和更好的方法来做到这一点?

谢谢!

5 个答案:

答案 0 :(得分:13)

看看地图功能。例如,

scala> List("Some", "Strings").map(_.toUpperCase)
res2: List[java.lang.String] = List(SOME, STRINGS)

scala> List("Some", "Strings").map(_.length)
res0: List[Int] = List(4, 7)

答案 1 :(得分:7)

只是对for循环的评论。以下是执行该循环的两种正确方法:

// Using "until" instead of "to": a until b == a to (b - 1)
for(i <- 0 until l.length) {
    result.update(i, l(i).toString)
}

// Using "indices" to get the range for you
for(i <- l.indices) {
    result.update(i, l(i).toString)
}

答案 2 :(得分:3)

 def f(s:String) = s.toCharArray // or output something else of any type 
 val l = List("123", "234", "345")
 l.map(f)

答案 3 :(得分:1)

你有没有尝试过理解?

val result=for(elem <- l) yield elem.toString().toUpperCase();

答案 4 :(得分:0)

怎么样

for(i <- 0 to l.length-1) {
    result.update(i, l(i).toString)
}