Go 语言程序检查一个集合是否为另一个切片的子集
切片类似于数组,唯一的区别是数组是元素的固定序列,而切片的数组元素是动态的。这使得切片在各种应用中更加高效和快速。在切片中,元素是通过引用而不是值传递的。在本文中,我们将学习使用 Go 编程语言检查一个切片的集合是否为另一个切片的子集的各种技术。
算法
步骤 1 − 创建一个 package main 并声明 fmt(格式化包)包在程序中,其中 main 生成可执行代码,而 fmt 帮助格式化输入和输出。
步骤 2 − 创建一个子集切片和一个超集切片,其中子集将是较小的集合,超集将是较大的集合。
步骤 3 − 使用 Go 语言中的 print 语句在控制台上打印子集和超集。
步骤 4 − 调用函数 is_subset,并传递两个参数:子集和超集,在其上执行操作。
步骤 5 − 在函数中使用 make 函数创建 checkset 映射,该函数是 Go 语言中的内置函数。
步骤 6 − 运行一个循环,直到子集的范围,并将子集的元素添加到映射中,值为 true。
步骤 7 − 运行另一个循环,直到超集的范围,并检查超集元素是否在映射中存在,然后从映射中移除该元素。
步骤 8 − 循环终止后,返回 checkset 映射的长度,如果长度等于零,则表示该集合是另一个集合的超集。
步骤 9 − 布尔值将使用 fmt.Println() 函数打印到控制台上,其中 ln 表示换行。
示例 1
在这个示例中,我们将看到如何使用映射检查集合是否为另一个切片的子集,该映射将使用 make 函数构造。
package main import ( "fmt" ) func main() { subset := []int{10, 20, 30} //create subset fmt.Println("The elements of set are:", subset) superset := []int{10, 20, 30, 40, 50} //create superset fmt.Println("The elements of superset are:", superset) is_Subset := is_Subset(subset, superset) fmt.Println("The elements are present in superset or not?") fmt.Println(is_Subset) } func is_Subset(subset []int, superset []int) bool { checkset := make(map[int]bool) for _, element := range subset { checkset[element] = true } for _, value := range superset { if checkset[value] { delete(checkset, value) } } return len(checkset) == 0 //this implies that set is subset of superset }
输出
The elements of set are: [10 20 30] The elements of superset are: [10 20 30 40 50] The elements are present in superset or not? true
示例 2
在这个示例中,我们将使用映射和范围检查集合是否为另一个切片的子集。我们将为超集和子集运行一个循环,输出将以布尔值的形式打印。
package main import ( "fmt" ) func main() { subset := []int{10, 20, 30, 40, 50} //create subset fmt.Println("The elements in the subset are:", subset) superset := []int{10, 20, 30, 40, 50} //create superset fmt.Println("The elements in the superset are:", superset) is_subset := is_subset(subset, superset) fmt.Println("Is the set subset of superset?") fmt.Println(is_subset) } func is_subset(subset []int, superset []int) bool { checkset := make(map[int]bool) for _, element := range subset { checkset[element] = true } for _, value := range superset { if !checkset[value] { return false //return false if set is not subset of superset } } return true //return true if set is subset of superset }
输出
The elements in the subset are: [10 20 30 40 50] The elements in the superset are: [10 20 30 40 50] Is the set subset of superset? true
结论
我们执行了使用不同示例集检查切片是否为超集的子集的程序。在第一个示例中,我们使用了子集长度 = 0 的方法,在第二个示例中,我们使用了映射和范围方法,输出结果为真或假。因此,程序执行成功。