首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Go中实现结构切片或映射的通用过滤器

可以通过自定义函数来实现。以下是一个示例代码:

代码语言:txt
复制
package main

import (
    "fmt"
)

type Person struct {
    Name string
    Age  int
}

type FilterFunc func(interface{}) bool

func Filter(slice interface{}, filterFunc FilterFunc) interface{} {
    switch slice := slice.(type) {
    case []Person:
        result := []Person{}
        for _, item := range slice {
            if filterFunc(item) {
                result = append(result, item)
            }
        }
        return result
    case map[string]Person:
        result := map[string]Person{}
        for key, item := range slice {
            if filterFunc(item) {
                result[key] = item
            }
        }
        return result
    default:
        return nil
    }
}

func main() {
    people := []Person{
        {Name: "Alice", Age: 25},
        {Name: "Bob", Age: 30},
        {Name: "Charlie", Age: 35},
    }

    // 过滤年龄大于等于30的人
    filteredPeople := Filter(people, func(p interface{}) bool {
        person := p.(Person)
        return person.Age >= 30
    }).([]Person)

    fmt.Println(filteredPeople)
}

在上述代码中,我们定义了一个FilterFunc类型,它是一个函数类型,用于定义过滤条件。然后,我们定义了一个Filter函数,它接受一个切片和一个过滤函数作为参数,并根据切片的类型进行不同的处理。对于[]Person类型的切片,我们创建一个新的切片并将满足过滤条件的元素添加到其中;对于map[string]Person类型的映射,我们创建一个新的映射并将满足过滤条件的键值对添加到其中。

main函数中,我们创建了一个people切片,然后使用Filter函数过滤出年龄大于等于30的人,并将结果打印出来。

这个通用过滤器可以用于任何结构切片或映射,只需根据实际情况进行相应的类型判断和处理即可。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅为示例,实际使用时应根据具体需求选择适合的腾讯云产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

6分7秒

070.go的多维切片

9分14秒

063.go切片的引入

5分59秒

069.go切片的遍历

4分42秒

067.go切片的复制

2分55秒

064.go切片的内存布局

5分8秒

084.go的map定义

4分26秒

068.go切片删除元素

13分40秒

040.go的结构体的匿名嵌套

11分33秒

061.go数组的使用场景

18分41秒

041.go的结构体的json序列化

5分25秒

046.go的接口赋值+嵌套+值方法和指针方法

7分59秒

037.go的结构体方法

领券