Particionar uma coleção em partes “k” de igual para igual (Scala, mas independente de idioma)

Definido antes deste bloco de código:

dataset pode ser umVector ouListnumberOfSlices é umInt denotando quantos "tempos" para fatiar o conjunto de dados

Eu quero dividir o conjunto de dados emnumberOfSlices fatias, distribuídas o mais uniformemente possível. Por "split" eu acho que quero dizer "partição" (intersecção de todos devem ser vazios, união de todos deve ser o original) para usar o termo teoria dos conjuntos, embora isso não seja necessariamente um conjunto, apenas uma coleção arbitrária.

por exemplo.

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

Existe uma maneira melhor de fazer isso do que o que eu tenho abaixo? (o que eu nem tenho certeza é o ideal ...) Ou talvez este não seja um esforço algoritmicamente viável, em cujo caso qualquer heurística boa conhecida?

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