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

Arrays 在scala中更改列表类型的最佳方法,arrays,list,scala,functional-programming,copy,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 我不确定这是否是我的错误所在,因为它没有给我任何东西,甚至没

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

这听起来可能是一种非常肮脏、低效的方法,但我不太确定最好的方法。我的代码是:

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)
}
(我)怎么样

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

for(i查看map函数。例如

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


只是对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)
}
//使用“直到”而不是“到”:a直到b==a到(b-1)

(i你试过理解吗

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

val result=for(elem)如果它来自另一种类型呢?我说的是l.map(.toString.map(.toUpperCase)还是l.map(u.toString.toUpperCase)?后者对我不起作用…@The_great_monkey那么它就是
l.map(u.toString.toUpperCase)
对Scala的任何介绍都会涉及映射、缩减、折叠和高阶函数(HOFs)总的来说,Scala上已经有了大量的资料,但这是一个很好的开始。为了澄清这一点,
l.map(uu.toString)
是编写
l.map(x=>x.toString)
的一种较短的方法。这是正确的答案(因为它提到了map),但理想情况下,示例应该更改列表的类型,例如
list(“一些”,“字符串”).map(u.length):List[Int]
它可以工作,谢谢,但我正在寻找更多的scala方式来完成它,而不是java/c++方式…
result.update(i,l(i).toString)
写得稍微好一点
result(i)=l(i).toString
,但这是非常糟糕的Scala代码,只有当
结果
是可变类时才有效,只有当它和
l
是索引序列时才有效。总之,它永远不会被称为惯用Scala。
 def f(s:String) = s.toCharArray // or output something else of any type 
 val l = List("123", "234", "345")
 l.map(f)
val result=for(elem <- l) yield elem.toString().toUpperCase();