Обойдите слайс, примените предикат к каждому элементу и добавьте подходящие значения в новый слайс. Ограничения comparable не нужны: достаточно any.
Реализуйте функцию Filter с поддержкой дженериков, которая принимает слайс и функцию-предикат и возвращает отфильтрованный слайс
Обойдите слайс, примените предикат к каждому элементу и добавьте подходящие значения в новый слайс. Ограничения 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). Исходный слайс не меняется самой функцией. Копирование элементов поверхностное: указатели и вложенные слайсы могут по-прежнему ссылаться на общие данные.