在Scala中分别从不同列表或文件的某些项目中获取列表

时间:2013-07-21 23:22:45

标签: list scala

首先我是这个网站的新手和Scala,所以请原谅任何错误:)

假设我有一个带有数字的文件,用这样的逗号分隔:12,25,32 ...

我希望列表中的这些数字(与文件中的顺序相同!)。我的问题是,当我读取文件的内容并使用以下命令将其转换为列表时

val myList = Source.fromFile("fileWithNumbers").toList

我最后得到的每个数字和逗号都是一个项目。为了得到我想要的东西,我提出了以下功能:

def numsfromlist(a: List[Char], res: List[Int], temp: String) : List[Int] =  {
if(a.isEmpty)
    res.reverseenter code here
else if(a.head == ',' )
    numsfromlist(a.tail, temp.toInt :: res, "")
else 
    numsfromlist( a.tail, res, temp :+ a.head)}
然后我就像这样打电话

val tailres = numsfromlist(Source.fromFile("fileWithNumbers").toList, Nil, "")

但我认为必须有更好,更像scala的方式来做到这一点。我很感激你的帮助。 THX!

1 个答案:

答案 0 :(得分:4)

你可以这样做:

val s = Source.fromFile("fileWithNumbers")
val nums = for {
  line <- s.getLines
  num  <- line.split(',')
} yield num.toInt

这将获取单个列表中所有行的所有数字。请注意,如果您的字符串无法转换为Int,则会引发异常。