Golang 检查一个集合是否是另一个切片的子集
切片类似于数组,唯一的区别是数组是固定长度的元素序列,而切片的元素是动态的。这使得切片在各种应用中更高效、更快。切片中的元素是通过引用传递而不是值传递的。在本文中,我们将学习使用 Go 编程语言的各种技术来检查一个切片的集合是否是另一个切片的子集。
步骤
- 步骤 1 - 创建一个包 main 并在程序中声明 fmt(格式化包) 包,其中 main 产生可执行代码,fmt 用于格式化输入和输出。
-
步骤 2 - 创建 subset 和 superset 切片,其中 subset 是小集合,superset 是大集合。
-
步骤 3 - 使用 Golang 的打印语句在控制台上打印 subset 和 superset。
-
步骤 4 - 使用 subset 和 superset 作为参数调用 is_subset 函数,对其进行操作。
-
步骤 5 - 在函数中使用 make 函数创建 checkset 映射,make 函数是 Golang 中的内置函数。
-
步骤 6 - 在循环中遍历 subset 的范围,并将 subset 的元素添加到具有 true 值的映射中。
-
步骤 7 - 在另一个循环中遍历 superset 的范围,并检查 superset 的元素是否存在于映射中,如果存在,则从映射中删除该元素。
-
步骤 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
在这个示例中,我们将使用map和range来检查一个集合是否是另一个切片的子集。我们将为超集和子集分别运行一个循环,并将输出打印为布尔值。
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的方法,而在第二个示例中,我们使用了映射和范围的方法,并且输出结果要么为真,要么为假。因此,程序成功执行。