我遇到了这个错误:
错误:非法启动简单表达式 def process_alcs(lines:List [String]):List [(String,Double)] = for(line< - lines)yield(val a = line.split(“,”))(a [0],a [ 4] .toDouble)
这段代码:
def process_alcs(lines: List[String]) : List[(String, Double)] =
for (line <- lines) yield (val a = line.split(",")) (a[0],a[4].toDouble)
我首先认为这是一个括号不匹配,但我检查了100次
答案 0 :(得分:3)
尝试
def process_alcs(lines: List[String]) : List[(String, Double)] = for (line <- lines) yield {
val a = line.split(",")
(a(0),a(4).toDouble)
}
基本上,您在收益率中执行多线评估。因此,您必须使用{
而不是(
将代码封装在其中。此外,两个语句都应该封装在一个{}
对中,因为它们可以构建到您想要的结果。
此外,使用()
而不是[]
访问scala中的数组成员。所以,你想使用(0)而不是[0]
另外,这似乎与其他人今天提出的另一个问题相关,在这种情况下,他希望转换为第4列中的两倍。要访问第4列,您需要使用(3)。
在这种情况下,代码变为,
def process_alcs(lines: List[String]) : List[(String, Double)] = for (line <- lines) yield {
val a = line.split(",")
(a(0), a(3).toDouble)
}
希望这会有所帮助。如果您还有其他问题,请与我们联系:)
编辑:要转换为地图,请尝试
def process_as_map(lines: List[String]) : Map[String, Double] = {
val results: List[(String, Double)] = for (line <- lines) yield {
val a = line.split(",")
(a(0), a(3).toDouble)
}
results.toMap
}
请参阅评论以获取解释,以及我根据您的代码进行调整的原因