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 的方法,在第二个示例中,我们使用了映射和范围方法,输出结果为真或假。因此,程序执行成功。

更新于: 2023 年 2 月 13 日

2K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告