使用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,我希望它与最后一组匹配。
希望可以解释我希望做的更多的事情。 谢谢。
答案 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