«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу добиться функциональности понимания списков в Go?

Как я могу добиться функциональности понимания списков в Go?

Опубликовано 10 ноября 2024 г.
Просматривать:761

How Can I Achieve List Comprehension Functionality in Go?

Эквивалент Go для построения списков в Python

Способ формирования списков в Python предлагает краткий способ создания списков путем фильтрации и преобразования элементов. Однако, если вы переходите на Go и вам сложно воспроизвести эту функциональность, вот решение:

Элегантное решение с использованием пакета фильтров

К счастью, сообщество Go предоставил пакет фильтров, который предлагает функциональность, аналогичную пониманию списков в Python. В частности, его функция Choose принимает срез и функцию фильтрации, возвращая новый срез, содержащий только элементы, прошедшие фильтр.

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

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

Пример:

// 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)

Альтернативный подход: циклы for

Хотя пакет фильтров обеспечивает удобство, важно отметить, что использование традиционных циклов for по-прежнему является жизнеспособным и эффективным вариантом. Циклы for в Go обеспечивают гибкость и возможности оптимизации.

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

Заключение

Несмотря на отсутствие встроенного синтаксиса понимания списков в Go, пакет фильтров и циклы for предлагают надежные решения для фильтрации и преобразования списков. Хотя пакет фильтров обеспечивает краткий синтаксис, циклы for остаются производительной и эффективной альтернативой. В конечном итоге выбор подхода будет зависеть от конкретных требований вашего приложения.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3