Golang 计算两个切片之间的差异

Golang 计算两个切片之间的差异

切片也可以被称为动态数组,因为其值是动态的,而普通数组是静态的。这使得切片更高效和更快。它们是按引用而不是按值传递的。在这里,我们将学习如何找到两个切片或两个动态数组之间的差异。

语法

func make ([] type, size, capacity)

在Go语言中,make函数用于创建数组/映射,它接受要创建的变量类型、大小和容量作为参数

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

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

步骤

  • 第1步 - 创建一个主要的包,并在该程序中声明fmt(格式化包)包,其中主要生成可执行代码,fmt用于格式化输入和输出。

  • 第2步 - 创建一个主函数,在该函数中使用一个名为myslice1的切片,并在控制台上打印它。

  • 第3步 - 同样,在控制台上创建一个名为myslice2的切片,并在控制台上打印它。

  • 第4步 - 使用make函数创建一个空切片,以便添加两个切片之间的差值。

  • 第5步 - 循环运行直到切片1的范围,并将找到的变量最初设置为false。

  • 第6步 - 再次运行嵌套形式的循环,并检查第一个切片中的元素是否等于第二个切片中的元素。

  • 第7步 - 如果为true,则将找到的变量设置为true并结束循环,否则继续循环。

  • 第8步 - 当循环终止时,检查found是否为false,将切片1的值添加到差值切片中并进入下一次迭代,但如果没有相同的值,则说明差值为0。

  • 第9步 - 使用fmt.Println()函数在控制台上打印切片,其中ln表示换行。

示例1

在这个示例中,我们将看到如何使用嵌套for循环计算两个切片之间的差值。这里的差异意味着在切片1中存在但不在切片2中的值。

package main
import (
   "fmt"
)
func main() {
   myslice1 := []int{10, 20, 30, 40, 50} //create slice1
   fmt.Println("The elements of slice1 are:", myslice1)
   myslice2 := []int{30, 40, 50, 60, 70} //create slice2
   fmt.Println("The elements of slice2 are:", myslice2)
   difference := make([]int, 0) //create difference slice to store the difference of two slices
   // Iterate over slice1
   for _, val1 := range myslice1 { //nested for loop to check if two values are equal
      found := false
      // Iterate over slice2
      for _, val2 := range myslice2 {
         if val1 == val2 {
            found = true
            break
         }
      }
      if !found {
         difference = append(difference, val1)
      }
   }
   fmt.Println("The difference of two slices is:", difference)
}

输出

The elements of slice1 are: [10 20 30 40 50]
The elements of slice2 are: [30 40 50 60 70]
The difference of two slices is: [10 20]

示例2

在这个示例中,我们将使用Golang中的map来计算两个切片之间的差异。元素将按照一种方式进行检查,如果它存在于第二个映射中,则不会被添加到差异切片中。

package main
import (
   "fmt"
)
func main() {
   myslice1 := []int{10, 20, 30, 40, 50} //create slice1
   fmt.Println("The elements of slice1 are:",myslice1)
   myslice2 := []int{30, 40, 50, 60, 70} //create slice2
   fmt.Println("The elements of slice2 are:",myslice2)
   difference := make([]int, 0)
   map1 := make(map[int]bool)
   map2 := make(map[int]bool)
   for _, val := range myslice1 {
      map1[val] = true
   }
   for _, val := range myslice2 {
      map2[val] = true
   }
   for key := range map1 {
      if _, ok := map2[key]; !ok {
         difference = append(difference, key) //if element not present in map2 append elements in difference slice
      }
   }
   fmt.Println("The difference between two slices is:")
   fmt.Println("Difference:", difference) //print difference
}

输出

The elements of slice1 are: [10 20 30 40 50]
The elements of slice2 are: [30 40 50 60 70]
The difference between two slices is:
Difference: [10 20]

结论

我们执行了使用两个示例查找两个切片之间差异的程序。第一个示例中我们使用了嵌套的for循环,而在第二个示例中我们使用了Golang中的map。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程