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

时间:2018-12-14 09:18:46

标签: go

使用Go 1.11我有5个小组,每个小组有3个数字。我希望能够将其与核心数据集进行比较。

示例数据

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,因此它应该与第三组匹配。

但是每次我尝试循环时,我都没有弄清逻辑。

最有帮助的人。

更新

这是我当前正在使用的代码

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也包含在codeData变量中。

但是,即使我有一个像coreData这样的[]int{3,2,7,1,9}仍然应该为true,因为它仍然有3,7,9,我希望它与最后一组匹配。

希望可以解释我希望做的更多的事情。 谢谢。

1 个答案:

答案 0 :(得分:3)

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

由于要部分匹配,因此不能使用深等于。

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

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
}

结果为:

  

false

     

false

     

true

相关问题