2015-05-17 39 views
7

voglio convertire un array di dimensioni fisse da una fetta:Go-lang: come convertire una slice in una matrice di dimensioni fisse?

func gen(bricks []Brick) { 
    if len(bricks) == 16 { 
     if check(Sculpture{bricks}) { 
      var b [16]Brick = bricks[0:16]; 
     } 
    } 
} 

Ma questo si traduce in:

cannot use bricks[0:16] (type []Brick) as type [16]Brick in assignment 

Come convertire una fetta in un array di dimensioni fisse?

+1

Possibile duplicato di [In golang come si converte una sezione in una matrice] (http://stackoverflow.com/questions/19073769/in-golang-how-do-you-convert-a-slice-into- an-array) – twinj

risposta

19

è necessario utilizzare copy:

slice := []byte("abcdefgh") 

var arr [4]byte 

copy(arr[:], slice[:4]) 

fmt.Println(arr) 

Come osserva Aedolon si può anche semplicemente usare

copy(arr[:], slice) 

come copia sarà sempre e solo copiare il minimo di len(src) e len(dst) byte.

+2

Questo è corretto, ma una piccola aggiunta: non è necessario 'copy (arr [:], slice [: 4])', 'copy (arr [:], slice)' è sufficiente. 'copia' si limita automaticamente al più piccolo delle fette specificate. – Aedolon

+0

@Aedolon Grazie per il suggerimento, l'ho aggiunto alla risposta. – inf

Problemi correlati