Unterteilen Sie eine Sammlung in "k" nahezu gleiche Teile (Scala, aber sprachunabhängig)

Vor diesem Codeblock definiert:

dataset kann sein aVector oderListnumberOfSlices ist einInt Gibt an, wie oft das Dataset geschnitten werden soll

Ich möchte den Datensatz aufteilennumberOfSlices Scheiben, möglichst gleichmäßig verteilt. Mit "Teilen" meine ich "Partition" (Schnittmenge von allen sollte leer sein, Vereinigung von allen sollte das Original sein), um den Begriff der Mengenlehre zu verwenden, obwohl dies nicht unbedingt eine Menge ist, sondern nur eine willkürliche Sammlung.

z.B.

dataset = List(1, 2, 3, 4, 5, 6, 7)
numberOfSlices = 3
slices == ListBuffer(Vector(1, 2), Vector(3, 4), Vector(5, 6, 7))

Gibt es einen besseren Weg, als den, den ich unten habe? (von dem ich nicht mal sicher bin, ob es optimal ist ...) Oder ist dies vielleicht kein algorithmisch machbares Unterfangen, in welchem ​​Fall eine bekannte gute Heuristik?

val slices = new ListBuffer[Vector[Int]]
val stepSize = dataset.length / numberOfSlices
var currentStep = 0
var looper = 0
while (looper != numberOfSlices) {
  if (looper != numberOfSlices - 1) {
    slices += dataset.slice(currentStep, currentStep + stepSize)
    currentStep += stepSize
  } else {
    slices += dataset.slice(currentStep, dataset.length)
  }
  looper += 1
}

Antworten auf die Frage(5)

Ihre Antwort auf die Frage