在go语言中寻找两个切片或数组中的相同元素/共同点/交集并集示例代码

2023-06-01 交集 切片 共同点

你有两个相同长度的切片/数组,你如何找出它们是否有相似/共同的元素?不同元素?交集并集?

解决方案:

迭代第一个切片的元素。
得到索引号。
用这个索引号得到第二个切片的元素。
比较这些元素。
如果相似或相同,则将该元素添加到一个新的切片。
循环,直到第一个切片中不再有元素。


代码示例:

 package main
 
 import (
         "fmt"
 )
 
 // 注意:这个例子只有在切片a的长度==切片b的长度时才有效。
 // 在生产中,请确保在比较之前检查片子的长度和容量。
 // 在比较之前。
 func main() {
         a := []string{"Hello", "No", "Cheers"}
         fmt.Println("切片 a : ", a)
         b := []string{"Hello", "Yes", "Cheers"}
         fmt.Println("切片 b : ", b)
         
         // 将a与be进行比较,找出共同的项目
         // 并存储到c中
         c := []string{}
         for i := range a {
                 if a[i] == b[i] {
                         c = append(c, a[i])
                 }
         }
         fmt.Println("相同元素 : ", c)
         
         // 比较a和be,找到不在a中的项目
         // 并存储到d中
         d := []string{}
         for i := range a {
                 if a[i] != b[i] {
                         d = append(d, a[i])
                 }
         }
         fmt.Println("a比b多的元素 ", d)
         
         // 将a与be进行比较,找到不在b中的项目
         //并存储到e中
         e := []string{}
         for i := range b { 
                         // 遍历b而不是a
                 if a[i] != b[i] {
                         e = append(e, b[i])
                 }
         }
         fmt.Println("b比a多的元素 ", e)
 }

输出 :

切片 a : [Hello No Cheers]
切片 b : [Hello Yes Cheers]
相同元素 : [Hello Cheers]
a比b多的元素 [No]
b比a多的元素 [Yes]

注意:

这个例子只有在片子a的长度==片子b的长度时才有效。

在生产中,确保在比较之前检查片子的长度和容量。

否则,会报一下错误:

panic: runtime error: index out of range

索引超出范围。

相关文章