2015-05-17 16 views
7

ich eine feste Größe Array aus einem Stück umwandeln möchten:Go-lang: Wie wird ein Slice in ein Array fester Größe konvertiert?

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

Aber dies führt zu:

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

Wie eine Scheibe in eine feste Größe Array konvertieren?

+1

Mögliche Duplikate von [In Golang, wie konvertiert man eine Scheibe in ein Array] (http://stackoverflow.com/questions/19073769/in-golol-how-do-you-convert-a-slice-into- an-array) – twinj

Antwort

19

Sie müssen copy verwenden:

slice := []byte("abcdefgh") 

var arr [4]byte 

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

fmt.Println(arr) 

Wie Aedolon Notizen können Sie auch

copy(arr[:], slice) 

als Kopie verwenden Sie einfach immer nur das Minimum von len(src) und len(dst) Bytes kopieren.

+2

Das ist richtig, aber ein kleiner Zusatz: Sie brauchen nicht kopieren (arr [:], slice [: 4]) ',' kopieren (arr [:], slice) 'ist genug. 'copy' beschränkt sich automatisch auf den kleineren der angegebenen Slices. – Aedolon

+0

@Aedolon Danke für den Hinweis, fügte es der Antwort hinzu. – inf

Verwandte Themen