doupo1890 2014-07-15 15:07
浏览 57
已采纳

检查切片是否包含具有给定字段值的结构

Trying to check if a struct in some slice contains a value of a given field so i wrote this

   func main() {
    //test
    Objs := []Obj{{1,"xxx"},{2,"yyy"},{3,"zzz"}}
    res := containsStructFieldValue(Objs,"X",1)
    fmt.Println(res)
}


type Obj struct {
    X int
    Y string
}

func containsStructFieldValue(slice []Obj ,fieldName string,fieldValueToCheck interface {}) bool{
    for _,s := range slice{
        r := reflect.ValueOf(s)
        f := r.FieldByName(fieldName)
        if f.IsValid(){
            if f.Interface() == fieldValueToCheck{
                return true //a field with the given value exists
            }
        }
    }
    return false
}

i need it to work for any given struct type but when i tried slice []interface as the parameter i found out that its not possible, any idea on how to make the above method work for any struct type?

  • 写回答

1条回答 默认 最新

  • dongshen7561 2014-07-15 15:36
    关注

    You can use reflect to range over an interface{}, for instance:

    func containsStructFieldValue(slice interface{} ,fieldName string,fieldValueToCheck interface {}) bool{
    
        rangeOnMe := reflect.ValueOf(slice)
    
        for i := 0; i < rangeOnMe.Len(); i++ {
            s := rangeOnMe.Index(i)
            f := s.FieldByName(fieldName)
            if f.IsValid(){
                if f.Interface() == fieldValueToCheck {
                    return true
                }
            }
        }
    }
    

    Note that I did not check that slice is indeed a slice... If not, this code will panic. You can use reflect.Kind to check this if you want to avoid this behaviour.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路