Scala:将数字划分为n个几乎相等长度的范围

标签 scala

我正在尝试实现一个功能:

def NumberPartition(InputNum:Int,outputListSize:Int):List[Range]

这样:

NumberPartition(8,3)=List(Range(0,3),Range(3,6),Range(6,8))

即。它创建 n-1 个等长范围(length=ceil(InputNum/outputListSize)) 加上最后/第一个稍小的范围。

我想使用此函数来聚合一个由 n 个子例程组成的并行程序,这些子例程将由 n 个任务/线程批量处理。

在 Scala 中执行此操作最惯用的方法是什么?

我认为使用范围步骤可能会有所帮助:

def rangeHeads(n:Int,len:Int):Range=Range(0,n,ceil(n/len))//type conversion for ceil() omitted here.
rangeHeads(8,3)//Range(0, 3, 6)

我只需要一个执行(1,2,3,4)->((1,2),(2,3),(3,4))的函数

最佳答案

虽然这不是您正在寻求的确切输出,但也许这将是很好的指导:

scala> def numberPartition(inputNum: Int, outputListSize: Int): List[List[Int]] = {
  (0 to inputNum).toList.grouped(outputListSize).toList
}
numberPartition: numberPartition[](val inputNum: Int,val outputListSize: Int) => List[List[Int]]

scala> numberPartition(8, 3)
res0: List[List[Int]] = List(List(0, 1, 2), List(3, 4, 5), List(6, 7, 8))

关于Scala:将数字划分为n个几乎相等长度的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42959826/

相关文章:

scala - 如何将 Seq[Column] 转换为 Map[String,String] 并更改值?

scala - Play Framework 2.2.x 多路由文件

java - 从java函数中部分应用函数

scala - TeamCity 自定义脚本中的 exitCode 不正确

scala - 在ScalaCheck中生成选项[T]

java - 如何从Elasticsearch读取数据到Spark?

scala - Flink Word Count Example 缺少一个库

mysql - Slick 中长时间运行的事务

scala - sbt 直接 git 源依赖项 - 不获取传递库依赖项?

templates - Scala 模板设置变量