Лучший способ изменить тип списка в scala

У меня есть список в 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.

Есть ли еще эффективный и лучший способ сделать это?

Спасибо!

6
задан Enrico Susatyo 4 August 2010 в 23:42
поделиться

5 ответов

Взгляните на функцию карты. Например,

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)
13
ответ дан 8 December 2019 в 04:50
поделиться

Просто замечание о цикле 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)
}
7
ответ дан 8 December 2019 в 04:50
поделиться
 def f(s:String) = s.toCharArray // or output something else of any type 
 val l = List("123", "234", "345")
 l.map(f)
3
ответ дан 8 December 2019 в 04:50
поделиться

Вы пробовали for-comprehensions?

val result=for(elem <- l) yield elem.toString().toUpperCase();
1
ответ дан 8 December 2019 в 04:50
поделиться

Как насчет

for(i <- 0 to l.length-1) {
    result.update(i, l(i).toString)
}
0
ответ дан 8 December 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: