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

使用 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,我想它匹配最后一组。


希望这能解释我想做更多的事情。谢谢。


慕尼黑的夜晚无繁华
浏览 113回答 1
1回答

繁华开满天机

这是我之前回答的更新,因为您需要部分匹配。因为你想要部分匹配,所以你不能使用深度相等。但是你可以做这样的事情。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 elementfunc contains(core []int, element int) bool {    for _, a := range core {        if a == element {            return true        }    }    return false}这导致:错误的错误的真的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go