| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package main
- import "fmt"
- func main() {
- a := []interface{}{2, 4, 5}
- b := []interface{}{3, 2, 5, 6}
- same, diff := getSameDiffMen(a, b)
- fmt.Println("获取相同元素:", same, " 不同元素:", diff)
- add, del := getAddDelMen(a, b)
- fmt.Println("获取增加元素:", add, " 删减元素:", del)
- }
- func getAddDelMen(old, new []interface{}) (add, del []interface{}) {
- temp := make(map[interface{}]interface{})
- for i := 0; i < len(old); i++ {
- for j := i; j < len(new); j++ {
- if old[i] != new[j] {
- if _, ok := temp[old[i]]; !ok { // 旧数组有但新数组没有,需要删除,标记为1
- temp[old[i]] = 1
- }
- if _, ok := temp[new[j]]; !ok { // 旧数组没有但新数组有,需要增加,标记为2
- temp[new[j]] = 2
- }
- } else {
- temp[old[i]] = 3 // 新旧数组都有,标记为#
- }
- }
- }
- // 整理结果
- for k, v := range temp {
- if v == 1 {
- del = append(del, k)
- }
- if v == 2 {
- add = append(add, k)
- }
- }
- return
- }
- func getSameDiffMen(old, new []interface{}) (same, diff []interface{}) {
- temp := make(map[interface{}]interface{})
- for i := 0; i < len(old); i++ {
- for j := i; j < len(new); j++ {
- if old[i] != new[j] {
- if _, ok := temp[old[i]]; !ok {
- temp[old[i]] = 1
- }
- if _, ok := temp[new[j]]; !ok {
- temp[new[j]] = 1
- }
- } else {
- temp[old[i]] = 2 // 新旧数组都有,标记为2
- }
- }
- }
- for k, v := range temp {
- if v == 1 {
- diff = append(diff, k)
- }
- if v == 2 {
- same = append(same, k)
- }
- }
- return
- }
|