0
votes

Y a-t-il un moyen de créer des blocs de banquier de n éléments d'un tableau donné à Scala?

Caded Scala Arraybuffer: Arraybuffer (200, 13, 1, 200, 15, 1, 201, 13, 0, 202, 14, 3, 199, 10, 2, 199, 11, 3, 199, 96, 2) Code >

Sortie attendue: Arraybuffer ((200, 13, 1), (200, 15, 1), (201, 13, 0), (202, 14, 3), (199, 10, 2), (199, 11, 3), (199, 96, 2)) Code> P>

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>

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))
    }
}


0 commentaires

3 Réponses :


4
votes

Vous voulez utiliser . GROUPED (3) code>

(l'API de collections Exemples ) P>

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))


1 commentaires

Notez que l'élément final du tableau peut avoir moins de valeurs 3 si la taille n'est pas un multiple de 3.



1
votes

Ceci créera un tampon de tuples, qui est ce que le code d'origine semble tenter. xxx

Notez que si le groupe final n'est pas 3 éléments alors il sera ignoré.


1 commentaires

Filtre (_. Taille <3) peut être un peu plus claire que le Collecter (ou même avecfilter pour éviter de créer un nouveau ArrayBuffer )



1
votes

Ceci pourrait également être réalisé en utilisant le glissement:

myArray.sliding(3, 3).toArray


0 commentaires