文件行中的Bin编号优雅地分组

时间:2017-06-02 14:11:18

标签: java arrays string scala binning

我有一个文本文件,如下所示。它包含6行的标题,然后只包含数值(整数)。我想将这些整数加到一个范围内,假设值在0到50之间,我想把它们分成5个,即bin到0...10...20...30...40...50

是否有一些优雅的方式来装箱?

ncols 4
nrows 3
xllcorner 0
yllcorner 0
cellsize 1
nodata_value -999
1 2 3 4
4 21 3 3
3 2 31 1 

目前我使用迭代器作为文件行,并使用扫描仪对行内的值进行标记 - 这看起来相当笨拙。期待一些优雅的想法。

预期输出

ncols 4
nrows 3
xllcorner 0
yllcorner 0
cellsize 1
nodata_value -999
1 1 1 1
1 2 1 1
1 1 3 1

1 个答案:

答案 0 :(得分:0)

object Test {

  def main(args:Array[String]):Unit={
    val source = scala.io.Source.fromFile("/ssd2/test.txt")
    val lines = source.getLines().toList
    val (header, payload) = (lines.take(6), lines.drop(6))

    def classify(i:Int):Int = (i / 10) + 1

    val binned = payload.map{line =>
      line.split(" ").map(n => classify(n.toInt)).mkString(" ")
    }

    val result = header ++ binned
    result.foreach(println(_))
  }

}

虽然输出是

ncols 4
nrows 3
xllcorner 0
yllcorner 0
cellsize 1
nodata_value -999
1 1 1 1
1 3 1 1
1 1 4 1

我认为您的预期输出样本中有一个小错误。