我在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错误而崩溃。
有没有更有效率和更好的方法来做到这一点?
谢谢!
答案 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)
}