Реализуйте функцию Filter с поддержкой дженериков, которая принимает слайс и функцию-предикат и возвращает отфильтрованный слайс

Обойдите слайс, примените предикат к каждому элементу и добавьте подходящие значения в новый слайс. Ограничения comparable не нужны: достаточно any.

Короткий ответ

Что ответить на собеседовании

Обойдите слайс, примените предикат к каждому элементу и добавьте подходящие значения в новый слайс. Ограничения comparable не нужны: достаточно any.

Подробный разбор

Ответ с пояснениями

Обойдите слайс, примените предикат к каждому элементу и добавьте подходящие значения в новый слайс. Ограничения comparable не нужны: достаточно any.

func Filter[T any](items []T, keep func(T) bool) []T {
    result := make([]T, 0, len(items))
    for _, item := range items {
        if keep(item) { result = append(result, item) }
    }
    return result
}

Порядок сохраняется, время O(n), дополнительная память O(n). Исходный слайс не меняется самой функцией. Копирование элементов поверхностное: указатели и вложенные слайсы могут по-прежнему ссылаться на общие данные.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее