ab0c41b0创建于 1月7日历史提交
package diff

type Elem interface {
	~string | ~byte | ~int | ~int8 | ~int16 | ~int64 | ~float32 | ~float64
}

func Diff[T Elem](old []T, new []T) (deleted []T, added []T) {
	m := make(map[T]int, len(old))
	for _, v := range old {
		m[v]++
	}
	for _, v := range new {
		if m[v] > 0 {
			m[v]--
		} else {
			added = append(added, v)
		}
	}
	for k, c := range m {
		for i := 0; i < c; i++ {
			deleted = append(deleted, k)
		}
	}
	return
}