Caded Scala Arraybuffer:
Sortie attendue:
Y a-t-il un moyen simple d'atteindre cette forme de chunking à Scala sans boucles? Le chunk_size requis est 3. Et l'ordre de ces éléments doit être identique. P> J'ai essayé: p> Arraybuffer (200, 13, 1, 200, 15, 1, 201, 13, 0, 202, 14, 3, 199, 10, 2, 199, 11, 3, 199, 96, 2) Code > Arraybuffer ((200, 13, 1), (200, 15, 1), (201, 13, 0), (202, 14, 3), (199, 10, 2), (199, 11, 3), (199, 96, 2)) Code> P> def chunkArray(myArray){
val chunk_size = 3
var index = 0
var arrayLength = arrayToInsert.length
var tempArray = ArrayBuffer[Int](2)
val numChunks = arrayToInsert.length / 3
for (i <- 0 to numChunks-1) {
var myChunk = arrayToInsert.slice(i*chunk_size, (i+1)*chunk_size)
tempArray += (myChunk(0), myChunk(1), myChunk(2))
}
}
3 Réponses :
Vous voulez utiliser (l'API de collections Exemples ) P> . GROUPED (3) code> collection.mutable.ArrayBuffer(200, 13, 1, 200, 15, 1, 201, 13, 0, 202, 14, 3, 199, 10, 2, 199, 11, 3, 199, 96, 2).grouped(3).toArray
res2: Array[collection.mutable.ArrayBuffer[Int]] = Array(ArrayBuffer(200, 13, 1), ArrayBuffer(200, 15, 1), ArrayBuffer(201, 13, 0), ArrayBuffer(202, 14, 3), ArrayBuffer(199, 10, 2), ArrayBuffer(199, 11, 3), ArrayBuffer(199, 96, 2))
Notez que l'élément final du tableau code> code> peut avoir moins de valeurs 3 si la taille n'est pas un multiple de 3.
Ceci créera un tampon code> code> de tuples, qui est ce que le code d'origine semble tenter. Notez que si le groupe final code> n'est pas 3 éléments alors il sera ignoré. p> p>
Filtre (_. Taille <3) code> peut être un peu plus claire que le Collecter code> (ou même avecfilter code> pour éviter de créer un nouveau ArrayBuffer code>)
Ceci pourrait également être réalisé en utilisant le glissement:
myArray.sliding(3, 3).toArray