У меня есть список в scala, названном l: Список [AType], который я хочу изменить на список [Строка].
Это может походить на очень грязный, неэффективный подход, но я не совсем уверен в лучшем способе сделать это. Мой код был:
var result = new Array[String]("a","b")
l foreach { case a => result = result :+ (a.toString().toUpperCase()); }
result toList
Я не уверен, является ли это то, где моя ошибка, потому что она ничего не дает мне, она ничего даже не печатает, даже если я поместил оператор печати в цикле.
Таким образом, я решил изменить это на более обязательный путь:
for(i <- 0 to l.length) {
result.update(i, l(i).toString)
}
На этот раз я вижу вещи, которые я хочу видеть при печати в цикле, но в конце программа, разрушенная с ошибкой IndexOutOfBound.
Есть ли еще эффективный и лучший способ сделать это?
Спасибо!
Взгляните на функцию карты. Например,
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)
Просто замечание о цикле 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)
}
def f(s:String) = s.toCharArray // or output something else of any type
val l = List("123", "234", "345")
l.map(f)
Вы пробовали for-comprehensions?
val result=for(elem <- l) yield elem.toString().toUpperCase();
Как насчет
for(i <- 0 to l.length-1) {
result.update(i, l(i).toString)
}