我是Scala的新手,我正在创建一个应用程序,我必须映射一个代表名称的字符串,其中包含由整数列表表示的测试分数。
基本上我有以下信息:
Neil, 68, 79, 90
Buzz, 81, 52, 65
Michael, 95, 92, 81
在名为scores.txt的文本文件中,即
val mapData = readTextFile("scores.txt")
我希望在每个人得分后将其拆分并将其映射到字符串和整数列表。我目前有一个名为readTextFile的函数,它将txt文件作为输入,从那里我有点难过。
我知道它应该与以下内容类似但我无法理解它。
def readTextFile(filename: String): Map[String, List[Int]] = {
var mapBuffer: Map[String, List[Int]] = Map()
try {
for (line <- Source.fromFile(filename).getLines()) {
val splitline = line.split(",").map(_.trim).toList
// add element to map buffer
mapBuffer = mapBuffer ++ Map(splitline.head -> splitline.tail.head.toInt)
}
} catch {
case ex: Exception => println("Sorry, an exception happened.")
}
mapBuffer
}
非常感谢任何帮助。
先谢谢,史蒂文。
答案 0 :(得分:1)
您需要修复此行。 splitline.tail.head.toInt
只获取每行中的第二个元素。您想要将splitline
的尾部映射并转换为List[Int]
:
mapBuffer = mapBuffer ++ Map(splitline.head -> splitline.tail.map(_.toInt))
答案 1 :(得分:1)
我建议使用对线条的理解来制作对,然后将它们转换为地图:
def readTextFile(filename: String) = {
val pairs =
for {
line <- Source.fromFile(filename).getLines()
split = line.split(",").map(_.trim).toList
name = split.head
scores = split.tail.map(_.toInt)
} yield (name -> scores)
pairs.toMap
}