bu kod bloğunun önce Tanımlı:Bölme yakın-eşit parçaya (Scala, ancak dilin agnostik)
dataset
birVector
veyaList
numberOfSlices
birInt
olduğunu olabilir veri kümesini kesmek için kaç "kez" ifade eden
Veri kümesini numberOfSlices
dilimler halinde bölmek, mümkün olduğunca eşit dağıtmak istiyorum. "Bölünmüş" ile kastediyorum sanırım "bölüm" demek (kesişim boş olmalı, her şey birliği orijinal olmalıdır) set teori terimini kullanmak için, ancak bu zorunlu olarak bir dizi, sadece keyfi bir koleksiyon değildir.
örn.
dataset = List(1, 2, 3, 4, 5, 6, 7)
numberOfSlices = 3
slices == ListBuffer(Vector(1, 2), Vector(3, 4), Vector(5, 6, 7))
Bunu, sahip olduğumdan daha iyi bir yolu var mı? (ki bu bile emin değilim ki en iyisi ...) Veya belki de bu, algoritmik olarak uygulanabilir bir çaba değil, bu durumda bilinen herhangi bir iyi sezgisel mi?
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
}
"Nasıl mümkün olduğunca eşit dağıtılır" yorumlanacağından emin değilim. Kodunuza göre, 'Seq: grouped (Int) 'zaten istediğinizi yapar, ancak dilim boyutunun üzerine çıkmaz. – Kaito
"Gruplandırılmış", "x" gruplarına bölünürken, "x" gruplarına ayırmak istiyorum. Cevapta denedim, 'List (1, 2, 3, 4, 5) .gruplu (2) .toList' Listesini veriyor (Liste (1, 2), Liste (3, 4), Liste (5)) '' Ben gibi bir şey istiyorum 'List (Liste (1, 2), Liste (3, 4, 5)) '. – adelbertc