DEV Community

Cover image for Melhorando a Compreensão de Slices Multidimensionais em Golang
Fabiano Santos Florentino
Fabiano Santos Florentino

Posted on • Edited on

1

Melhorando a Compreensão de Slices Multidimensionais em Golang

Olá mundo!

Faz tempo desde o último artigo, mas estou de volta! Neste artigo, vou tentar explicar e aprimorar o entendimento sobre slices multidimensionais em Golang.

O que é um slice multidimensional?

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

Como funciona em Golang?

Conceitos básicos

  • Array multidimensional: um array multidimensional é 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 uma matriz 2D e a inicializamos com alguns valores. Em seguida, criamos um slice 2D e atribuímos a matriz 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("Matriz 2D original:")
    printMatrix(matrix)
}
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, criamos um slice multidimensional 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 da matriz.

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

    fmt.Println("Matriz 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)
}
Enter fullscreen mode Exit fullscreen mode

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 colunas, você precisa iterar pelas linhas e criar fatias das colunas desejadas.

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

    fmt.Println("Matriz 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)
}
Enter fullscreen mode Exit fullscreen mode

4. Função auxiliar para imprimir a matriz

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

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("Matriz 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)
    }
}
Enter fullscreen mode Exit fullscreen mode

Conclusão

Compreender o conceito de slices multidimensionais é essencial para qualquer desenvolvedor que deseja manipular estruturas de dados complexas de forma eficiente. Esse conhecimento não apenas aprimora a capacidade de lidar com arrays em várias 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 áreas como processamento de imagens, ciência de dados e outras 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 ágil e eficaz, e a criar soluções mais robustas e escaláveis.

Referências

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay