为了账号安全,请及时绑定邮箱和手机立即绑定

如何将一个切片与其他切片进行比较以查看内容是否匹配

如何将一个切片与其他切片进行比较以查看内容是否匹配

Go
慕尼黑的夜晚无繁华 2023-05-15 15:26:56
使用 Go 1.11,我在自己的切片中有 5 组三个数字。我希望能够将其与核心数据集进行比较。示例数据My Groups: [[1 2 3] [4 9 2] [7 9 3] [4 7 5] [4 3 2]]My Core Data: [5 9 7 3 2]所以我希望能够将我的核心数据与任何组相匹配。如示例数据所示,核心数据确实有 9、7 和 3,因此它应该匹配第 3 组。但是每次我尝试循环时,我的逻辑都不正确。欢迎任何帮助。更新所以这是我目前正在使用的代码groupData := [][]int{{1,2,3}, {7,8,9}, {9,7,3}}coreData := []int{5,9,7,3,2}for _, data := range groupData {   fmt.Println( data )   fmt.Println( groupData )   fmt.Println( reflect.DeepEqual(data, coreData) )}这始终返回 false。即使您可以看到的最后一组数据也9,7,3包含在codeDatavar 中。但即使我有一个coreData类似[]int{3,2,7,1,9}的结果仍然应该是真的,因为它仍然有 3、7、9,我想它匹配最后一组。希望这能解释我想做更多的事情。谢谢。
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

这是我之前回答的更新,因为您需要部分匹配。


因为你想要部分匹配,所以你不能使用深度相等。


但是你可以做这样的事情。


func main() {

    groupData := [][]int{{1,2,3}, {7,8,9}, {9,7,3}}

    coreData := []int{5,9,7,3,2}

    

    // Loop over each group to check a partial match against core

    for _, data := range groupData {

       fmt.Println( check(data, coreData ))


    }

}


func check(group, core[]int) bool {

    // Loop over each group element to check if its available in core

    for _, s := range group{

        if contains(core, s) == false {

            return false

        }   

    }

    return true

}


// Returns true if core contains the element

func contains(core []int, element int) bool {

    for _, a := range core {

        if a == element {

            return true

        }

    }

    return false

}

这导致:


错误的


错误的


真的


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信