Go语言程序:从切片中移除子集


切片类似于数组,唯一的区别是数组是元素的固定序列,而切片中的数组元素是动态的。这使得切片在各种应用中更有效率和更快。在切片中,元素是通过引用而不是值传递的。在本文中,我们将学习使用 Go 语言编程从切片中移除子集的不同技巧。

语法

func append(slice, element_1, element_2…, element_N) []T

append 函数用于向数组切片添加值。它接受多个参数。第一个参数是要添加值的数组,后跟要添加的值。然后,该函数返回包含所有值的最终数组切片。

算法

  • 步骤 1 − 创建一个名为 main 的包并声明 fmt(格式化包)包

  • 步骤 2 − 在 main 函数中创建一个切片,并在该切片中添加值。

  • 步骤 3 − 创建切片的子集并调用内部函数

  • 步骤 4 − 创建一个输出切片并遍历该切片

  • 步骤 5 − 打印输出

示例 1

在本例中,我们将了解如何使用嵌套 for 循环从切片中移除子集。

package main
import "fmt"

func main() {
   slice := []int{10, 20, 30, 40, 50, 60} //create slice
   fmt.Println("The elements of slice are:", slice)
   subset := []int{30, 40, 50, 60} //create subset
   fmt.Println("The elements of subset which are to be removed are:", subset)
   slice = removesubset(slice, subset) // Call the removesubset function
   fmt.Println("The slice after removing elements subset from it are:")
   fmt.Println(slice)
}

// removesubset function
func removesubset(slice, subset []int) []int {
   for _, val := range subset {
      for i, element := range slice {
         if val == element {
            slice = append(slice[:i], slice[i+1:]...) //remove subset using append function
            break
         }
      }
   }
   return slice //return slice to the function after subsets are removed
}

输出

The elements of slice are: [10 20 30 40 50 60]
The elements of subset which are to be removed are: [30 40 50 60]
The slice after removing elements subset from it are:
[10 20]

示例 2

在本例中,我们将使用 map 来存储子集的元素,该子集将使用 make 函数创建,make 函数是 Go 语言中的内置函数。

package main
import "fmt"

func main() {
   slice := []int{10, 20, 30, 40, 50, 60} //create slice
   fmt.Println("The elements of slice are:", slice)
   subset := []int{30, 40, 50, 60} //create subset
   fmt.Println("The elements of subset are:", subset)
   slice = removesubset(slice, subset)
   fmt.Println("The slice after removal of elements is:")
   fmt.Println(slice)
}
func removesubset(slice, subset []int) []int {
   subsetmap := make(map[int]bool) //create subsetmap using make function
   for _, element := range subset {
      subsetmap[element] = true
   }
   var output []int
   for _, val := range slice {
      if !subsetmap[val] {
         output = append(output, val)
      }
   }
   return output //return output slice without subsets
}

输出

The elements of slice are: [10 20 30 40 50 60]
The elements of subset are: [30 40 50 60]
The slice after removal of elements is:
[10 20]

结论

我们使用两个示例执行了从切片中移除子集的程序。在第一个示例中,我们使用了嵌套 for 循环,在第二个示例中,我们使用了 map 来存储子集的值。

更新于: 2023年2月13日

367 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告