Scala,迭代一个集合,计算出10%的分数

时间:2017-05-22 14:25:54

标签: scala

在迭代任意大小的List时,我想以~10%的间隔打印一些输出,以显示迭代正在进行。对于任何10个或更多元素的列表,我想要打印10个输出。

我已经使用%Math功能,但除非列表大小是10的倍数,否则我不会总是打印10个输出。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

一种可能性是根据您的输入计算10%的大小,然后使用IterableLike.grouped根据该百分比进行分组:

object Test {
  def main(args: Array[String]): Unit = {
    val range = 0 to Math.abs(Random.nextInt(100))

    val length = range.length
    val percent = Math.ceil((10.0 * length) / 100.0).toInt

    println(s"Printing by $percent percent")

    range.grouped(percent).foreach {
      listByPercent =>
        println(s"Printing $percent elements: ")
        listByPercent.foreach(println)
    }
  }
}

答案 1 :(得分:0)

除非您的列表长度可以被10整除,否则您将无法获得10个打印语句。在这里,我按间隔向上舍入(ceil),因此您将获得更少的打印语句。您可以使用Math.floor向下舍入,并为您提供更多的打印语句。

// Some list
val list = List.range(0, 27)

// Find the interval that is roughly 10 percent
val interval = Math.ceil(list.length / 10.0)

// Zip the list with the index, so that we can look at the indexes
list.zipWithIndex.foreach {
  case (value, index) =>

    // If an index is divisible by out interval, do your logging
    if (index % interval == 0) {
      println(s"$index / ${list.length}")
    }

    // Do something with the value here
}

输出:

0 / 27
3 / 27
6 / 27
9 / 27
12 / 27
15 / 27
18 / 27
21 / 27
24 / 27