"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso obter a funcionalidade de compreensão de lista no Go?

Como posso obter a funcionalidade de compreensão de lista no Go?

Publicado em 2024-11-10
Navegar:713

How Can I Achieve List Comprehension Functionality in Go?

Go Equivalent for Python's List Comprehension

A compreensão de lista do Python oferece uma maneira concisa de gerar listas filtrando e transformando elementos. No entanto, se você estiver migrando para Go e achar um desafio replicar essa funcionalidade, aqui está uma solução:

Solução elegante usando pacote de filtro

Felizmente, a comunidade Go forneceu o pacote filter, que oferece funcionalidade semelhante à compreensão de lista do Python. Especificamente, sua função Choose usa uma fatia e uma função de filtragem, retornando uma nova fatia contendo apenas os elementos que passam no filtro.

import "github.com/rogpeppe/go-internal/filter"

func Choose(slice []T, fn func(T) bool) []T

Exemplo:

// Get even numbers from a list
a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
expect := []int{2, 4, 6, 8}
result := filter.Choose(a, isEven)

Abordagem alternativa: For Loops

Embora o pacote de filtros ofereça conveniência, é importante observar que o uso de loops for tradicionais ainda é uma opção viável e eficiente. Os loops for do Go oferecem flexibilidade e oportunidades de otimização.

for i := range a {
    if someCondition {
        result = append(result, a[i])
    }
}

Conclusão

Apesar da falta de sintaxe de compreensão de lista nativa em Go, o pacote de filtros e os loops for oferecem soluções robustas para filtrar e transformar listas. Embora o pacote de filtros forneça uma sintaxe concisa, os loops for continuam sendo uma alternativa eficiente e de alto desempenho. Em última análise, a escolha da abordagem dependerá dos requisitos específicos da sua aplicação.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3