Slice Multi-dimensional em Golang

RMAG news

Olá mundo!

Faz tempo desde o último artigo, mas estou de volta! nesse artigo vou tentar explicar e aprender sobre slices multi-dimensionais em Golang.

O que é um slice multi-dimensional?

Um slice multi-dimensional é um slice que contém outros slices. Em outras palavras, é um slice de slices. Isso é útil quando você precisa de uma matriz de tamanho variável.

Como funciona em Golang?

Conceitos básicos

Array Multi-dimensional: um array multi-dimensional é um array que contém outros arrays como elementos. Em Go,
você pode declarar um array de duas dimensões (por exemplo, uma matriz) como var slice [3][3]int.

Slice: Uma fatia é uma referência a um segmento contínuo de um array. Fatias em Go têm uma capacidade (cap) e um comprimento (len), e podem ser redimensionadas.

1. Criando um slice 2D

Primeiro criamos um array 2D e inicializamos com alguns valores. Em seguida, criamos um slice 2D e atribuímos o array 2D a ele.

package main

import (
“fmt”
)

func main() {
matrix := [3][4]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}

fmt.Println(“Array 2D original:”)
printMatrix(matrix)
}

Neste exemplo, criamos um slice multi-dimensional de inteiros. Cada elemento do slice principal é um slice de inteiros. Podemos acessar os elementos individuais da matriz usando a notação de colchetes duplos:

2. Fazendo Slice de Linhas Específicas

Criamos uma fatia para acessar partes específicas do array.

func main() {
matrix := [3][4]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}

fmt.Println(“Array 2D original:”)
printMatrix(matrix)

// Fatia da primeira linha
firstRow := matrix[0][:] // Equivalente a matrix[0][0:4]
fmt.Println(nPrimeira linha como fatia:”, firstRow)

// Fatia da segunda linha, mas apenas os dois primeiros elementos
secondRowPartial := matrix[1][:2]
fmt.Println(“Parte da segunda linha:”, secondRowPartial)
}

Neste exemplo, acessamos os elementos individuais da matriz usando a notação de colchetes duplos. O primeiro índice refere-se ao índice do slice principal e o segundo índice refere-se ao índice do slice interno.

3. Fazendo Slice de Colunas

Para acessar colinas, você precisa iterar as linhas e criar fatias das colunas que você busca.

func main() {
matrix := [3][4]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}

fmt.Println(“Array 2D original:”)
printMatrix(matrix)

// Fatia da primeira coluna
var firstCol []int
for i := range matrix {
firstCol = append(firstCol, matrix[i][0])
}
fmt.Println(nPrimeira coluna como fatia:”, firstCol)

// Fatia da segunda coluna
var secondCol []int
for i := range matrix {
secondCol = append(secondCol, matrix[i][1])
}
fmt.Println(“Segunda coluna como fatia:”, secondCol)
}

4. Função auxiliar para imitar a matriz

func printMatrix(matrix [3][4]int) {
for _, row := range matrix {
fmt.Println(row)
}
}

Código completo

package main

import (
“fmt”
)

func main() {
matrix := [3][4]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}

fmt.Println(“Array 2D original:”)
printMatrix(matrix)

// Fatia da primeira linha
firstRow := matrix[0][:]
fmt.Println(nPrimeira linha como fatia:”, firstRow)

// Fatia da segunda linha, mas apenas os dois primeiros elementos
secondRowPartial := matrix[1][:2]
fmt.Println(“Parte da segunda linha:”, secondRowPartial)

// Fatia da primeira coluna
var firstCol []int
for i := range matrix {
firstCol = append(firstCol, matrix[i][0])
}
fmt.Println(nPrimeira coluna como fatia:”, firstCol)

// Fatia da segunda coluna
var secondCol []int
for i := range matrix {
secondCol = append(secondCol, matrix[i][1])
}
fmt.Println(“Segunda coluna como fatia:”, secondCol)
}

func printMatrix(matrix [3][4]int) {
for _, row := range matrix {
fmt.Println(row)
}
}

Conclusão

Compreender o conceito de slices multidimensionais é essencial para qualquer desenvolvedor que almeja manipular estruturas de dados complexas de forma eficiente. Este conhecimento não só aprimora a capacidade de lidar com arrays em diversas linguagens, mas também simplifica a execução de operações complexas, aumentando a clareza e a manutenibilidade do código. Ao dominar o uso de slices multidimensionais, você ganha uma ferramenta poderosa para enfrentar desafios em campos como processamento de imagens, ciência de dados e outras áreas que exigem a manipulação de grandes volumes de dados. Essa habilidade se traduz em código mais eficiente e expressivo, capacitando você a resolver problemas de maneira mais ágil e eficaz, e a criar soluções mais robustas e escaláveis.

Referências

Go Specification
Effective Go

Please follow and like us:
Pin Share