在迭代任意大小的List时,我想以~10%的间隔打印一些输出,以显示迭代正在进行。对于任何10个或更多元素的列表,我想要打印10个输出。
我已经使用%
和Math
功能,但除非列表大小是10的倍数,否则我不会总是打印10个输出。非常感谢您的帮助。
答案 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