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。