package util

import (
	"errors"
	"reflect"
)

// AppendIfNotExists 向切片中追加元素,如果元素已存在则不添加
func AppendIfNotExists(slice []string, element string) []string {
	for _, item := range slice {
		if item == element {
			return slice // 元素已存在,直接返回原切片
		}
	}
	return append(slice, element) // 元素不存在,追加到切片末尾
}
func MergeSlice(slice1 []string, slice2 []string) []string {

	// 遍历第二个切片中的元素,并去重追加到结果切片1中
	for _, element := range slice2 {
		found := false
		for _, item := range slice1 {
			if element == item {
				found = true
				break
			}
		}
		if !found {
			slice1 = append(slice1, element)
		}
	}
	return slice1
}

func ContainsElement(slice interface{}, element interface{}) (bool, error) {
	sliceValue := reflect.ValueOf(slice)
	if sliceValue.Kind() != reflect.Slice {
		return false, errors.New("没有输入切片。")
	}
	for i := 0; i < sliceValue.Len(); i++ {
		currentElement := sliceValue.Index(i).Interface()
		if reflect.DeepEqual(currentElement, element) {
			return true, nil
		}
	}
	return false, nil
}