Sök…
Introduktion
Matriser är specifik datatyp som representerar en ordnad samling av element av en annan typ.
I Go kan Arrays vara enkla (ibland kallade "listor") eller flerdimensionella (som till exempel en 2-dimensionella matriser som representerar en ordnad samling av matriser, som innehåller element)
Syntax
- var variabelName [5] ArrayType // Declaring a array of size 5.
- var variabelName [2] [3] ArrayType = {{Value1, Value2, Value3}, {Value4, Value5, Value6}} // Deklarerar en flerdimensionell matris
- variabelnamn: = [...] ArrayType {Value1, Value2, Value3} // Förklara en matris med storlek 3 (Compilern räknar matriselementen för att definiera storleken)
- arrayName [2] // Hämta värdet per index.
- arrayName [5] = 0 // Ställa in värdet på index.
- arrayName [0] // Arrayens första värde
- arrayName [len (arrayName) -1] // Arrayens sista värde
Skapa matriser
En matris i gång är en ordnad samling av element av samma typ.
Den grundläggande notationen för att representera matriser är att använda []
med variabelns namn.
Att skapa en ny matris ser ut som var array = [size]Type
, ersätter size
med ett nummer (till exempel 42
att ange det kommer att vara en lista med 42 element), och ersätta Type
med den typ av element som arrayen kan innehålla (för exempel int
eller string
)
Precis nedanför är det ett kodexempel som visar det olika sättet att skapa en matris i Go.
// Creating arrays of 6 elements of type int,
// and put elements 1, 2, 3, 4, 5 and 6 inside it, in this exact order:
var array1 [6]int = [6]int {1, 2, 3, 4, 5, 6} // classical way
var array2 = [6]int {1, 2, 3, 4, 5, 6} // a less verbose way
var array3 = [...]int {1, 2, 3, 4, 5, 6} // the compiler will count the array elements by itself
fmt.Println("array1:", array1) // > [1 2 3 4 5 6]
fmt.Println("array2:", array2) // > [1 2 3 4 5 6]
fmt.Println("array3:", array3) // > [1 2 3 4 5 6]
// Creating arrays with default values inside:
zeros := [8]int{} // Create a list of 8 int filled with 0
ptrs := [8]*int{} // a list of int pointers, filled with 8 nil references ( <nil> )
emptystr := [8]string{} // a list of string filled with 8 times ""
fmt.Println("zeroes:", zeros) // > [0 0 0 0 0 0 0 0]
fmt.Println("ptrs:", ptrs) // > [<nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil>]
fmt.Println("emptystr:", emptystr) // > [ ]
// values are empty strings, separated by spaces,
// so we can just see separating spaces
// Arrays are also working with a personalized type
type Data struct {
Number int
Text string
}
// Creating an array with 8 'Data' elements
// All the 8 elements will be like {0, ""} (Number = 0, Text = "")
structs := [8]Data{}
fmt.Println("structs:", structs) // > [{0 } {0 } {0 } {0 } {0 } {0 } {0 } {0 }]
// prints {0 } because Number are 0 and Text are empty; separated by a space
Multidimensionell matris
Flerdimensionella matriser är i grunden matriser som innehåller andra matriser som element.
Det representeras som [sizeDim1][sizeDim2]..[sizeLastDim]type
, ersätter sizeDim
med siffror som motsvarar längden på dimensionen, och type
efter datatypen i den multidimensionella matrisen.
Till exempel representerar [2][3]int
en matris bestående av 2 undermatriser med 3 int-typade element .
Det kan i princip vara en matris av 2 rader och 3 kolumner .
Så vi kan göra enorma mått nummer array som var values := [2017][12][31][24][60]int
till exempel om du behöver lagra ett nummer för varje minut sedan år 0.
För att få tillgång till denna typ av matris, för det sista exemplet, som söker efter värdet 2016-01-31 kl. 19:42, kommer du åt values[2016][0][30][19][42]
(eftersom arrayindex börjar vid 0 och inte vid 1 som dagar och månader)
Några exempel som följer:
// Defining a 2d Array to represent a matrix like
// 1 2 3 So with 2 lines and 3 columns;
// 4 5 6
var multiDimArray := [2/*lines*/][3/*columns*/]int{ [3]int{1, 2, 3}, [3]int{4, 5, 6} }
// That can be simplified like this:
var simplified := [2][3]int{{1, 2, 3}, {4, 5, 6}}
// What does it looks like ?
fmt.Println(multiDimArray)
// > [[1 2 3] [4 5 6]]
fmt.Println(multiDimArray[0])
// > [1 2 3] (first line of the array)
fmt.Println(multiDimArray[0][1])
// > 2 (cell of line 0 (the first one), column 1 (the 2nd one))
// We can also define array with as much dimensions as we need
// here, initialized with all zeros
var multiDimArray := [2][4][3][2]string{}
fmt.Println(multiDimArray);
// Yeah, many dimensions stores many data
// > [[[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]]
// [[[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]]
// We can set some values in the array's cells
multiDimArray[0][0][0][0] := "All zero indexes" // Setting the first value
multiDimArray[1][3][2][1] := "All indexes to max" // Setting the value at extreme location
fmt.Println(multiDimArray);
// If we could see in 4 dimensions, maybe we could see the result as a simple format
// > [[[["All zero indexes" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]]
// [[[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" "All indexes to max"]]]]
Matrisindex
Matrisvärden ska nås med ett nummer som anger platsen för önskat värde i matrisen. Detta nummer kallas Index.
Index startar vid 0 och slutar i matrislängd -1 .
För att få tillgång till ett värde måste du göra något så här: arrayName[index]
och ersätta "index" med siffran som motsvarar rankningen för värdet i din array.
Till exempel:
var array = [6]int {1, 2, 3, 4, 5, 6}
fmt.Println(array[-42]) // invalid array index -1 (index must be non-negative)
fmt.Println(array[-1]) // invalid array index -1 (index must be non-negative)
fmt.Println(array[0]) // > 1
fmt.Println(array[1]) // > 2
fmt.Println(array[2]) // > 3
fmt.Println(array[3]) // > 4
fmt.Println(array[4]) // > 5
fmt.Println(array[5]) // > 6
fmt.Println(array[6]) // invalid array index 6 (out of bounds for 6-element array)
fmt.Println(array[42]) // invalid array index 42 (out of bounds for 6-element array)
För att ställa in eller ändra ett värde i matrisen är sättet detsamma.
Exempel:
var array = [6]int {1, 2, 3, 4, 5, 6}
fmt.Println(array) // > [1 2 3 4 5 6]
array[0] := 6
fmt.Println(array) // > [6 2 3 4 5 6]
array[1] := 5
fmt.Println(array) // > [6 5 3 4 5 6]
array[2] := 4
fmt.Println(array) // > [6 5 4 4 5 6]
array[3] := 3
fmt.Println(array) // > [6 5 4 3 5 6]
array[4] := 2
fmt.Println(array) // > [6 5 4 3 2 6]
array[5] := 1
fmt.Println(array) // > [6 5 4 3 2 1]