斯卡拉 - 转换列表[字符串]元组列表[(Int,Int)]
问题描述:
我想从一个源获取线并将其转换为元组(Int,Int)。我用foreach做过。斯卡拉 - 转换列表[字符串]元组列表[(Int,Int)]
val values = collection.mutable.ListBuffer[(Int, Int)]()
Source.fromFile(invitationFile.ref.file).getLines().filter(line => !line.isEmpty).foreach(line => {
val value = line.split("\\s")
values += ((value(0).toInt, (value(1).toInt)))
})
什么是不使用foreach编写相同代码的最佳方法?
答
使用map
,它建立一个新的列表供您:
Source.fromFile(invitationFile.ref.file)
.getLines()
.filter(line => !line.isEmpty)
.map(line => {
val value = line.split("\\s")
(value(0).toInt, value(1).toInt)
})
.toList()
答
foreach
应该是最终的操作,而不是改造。
在你的情况,你要使用的功能map
val values = Source.fromFile(invitationFile.ref.file).getLines()
.filter(line => !line.isEmpty)
.map(line => line.split("\\s"))
.map(line => (line(0).toInt, line(1).toInt))
答
使用for
理解:
val values = for(line <- Source.fromFile(invitationFile.ref.file).getLines(); if !line.isEmpty) {
val splits = line.split("\\s")
yield (split(0).toInt, split(1).toInt)
}
时应有人选择'for'理解VS了'map'? – Tyler
'''是句法糖。请参阅http://stackoverflow.com/questions/1052476/what-is-scalas-yield/1059501#1059501。他们会被编译成'map'调用(以及其他调用)。我发现''''更容易阅读,然后进行一连串的“地图”链接调用。 – Davidann