Podziel kolekcję na równe części „k” (Scala, ale agnostyczne językowe)

Zdefiniowane przed tym blokiem kodu:

dataset może być aVector lubListnumberOfSlices jestInt oznaczający ile „czasów” pokroić zestaw danych

Chcę podzielić zestaw danych nanumberOfSlices plasterki, rozłożone równomiernie. Przez „podzielony” myślę, że mam na myśli „partycję” (przecięcie wszystkich powinno być puste, zjednoczenie wszystkich powinno być oryginalne), aby użyć terminu teorii zbiorów, choć niekoniecznie jest to zbiór, tylko dowolna kolekcja.

na przykład

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

Czy jest lepszy sposób na zrobienie tego niż to, co mam poniżej? (czego nie jestem nawet pewien, czy jest optymalny ...) A może to nie jest możliwe do wykonania algorytmicznie przedsięwzięcie, w którym to przypadku znana jest dobra heurystyka?

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
}

questionAnswers(5)

yourAnswerToTheQuestion