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

Enr*_*tyo 6 arrays functional-programming scala copy list

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

这可能听起来像一个非常肮脏,低效的方法,但我不太确定这样做的最好方法.我的代码是:

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

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

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

for(i <- 0 to l.length) {
    result.update(i, l(i).toString)
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

slu*_*nen 13

看看地图功能.例如,

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

要么

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

  • @the_great_monkey然后它是`l.map(_.toString.toUpperCase)` (3认同)
  • 为了澄清,`l.map(_.toString)`是编写`l.map(x => x.toString)`的一种较短的方法. (2认同)

Dan*_*ral 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)
}
Run Code Online (Sandbox Code Playgroud)