Scala删除嵌套列表中的元素

时间:2014-12-10 00:39:02

标签: arrays scala

我正在从制表符分隔的文档中读取数据,每行有4列。前4行看起来像:

  

1 1 5 874965758

     

1 2 3 876893171

     

1 3 4 878542960

     

1 4 3 876893119

第一列代表一个user-id,所以理想情况下我想从每一行中删除user-id并创建一个HashMap,其中key是user-id,值是一个Array of Arrays。例如每一行都是一个条目。

我的代码如下:

val filename = Source.fromFile("filepath.....")
val lines = filename.getLines 
val linesArray = lines.map(x => x.split("   "))
val next = linesArray.toList.groupBy(_(0))

这实现了这项工作 - 使用用户ID密钥创建Map,但是,显然我没有从每一行中删除用户ID,所以我有数据复制,例如如果我next.get("1")它会返回:List(Array(1,1,5,874965758)...)我想删除此数组中的初始条目。

此外,当我调用String时,当读取其中的行时会创建x.split。但是,我需要它是Integer。我怎样(安全地)确保这实际上是Integer?我在测试中这样做了,但我不认为它是最好的或最有效的:

next.map(_.map(_.toInt)) 

由于

2 个答案:

答案 0 :(得分:0)

将最后两行更改为

val linesArray = lines.map(_.split("    ").map(_.toInt)
val next = linesArray.groupBy(_._1).mapValues(_.tail)

答案 1 :(得分:0)

完成groupBy后,您可以执行以下操作以删除列表中的第一个条目。

grouped.mapValues( x => x.map( _.tail ) )

您可以通过执行以下操作将String键转换为Int键。

grouped.map{ case (k,v) => (k.toInt,v) }