func NewSet(data ...interface{}) *Set {
	s := NewEmptySet()

	for _, arg := range data {
		switch v := arg.(type) {
		case []int:
			for _, element := range v {
				s.Add(element)
			}
		case []string:
			for _, element := range v {
				s.Add(element)
			}
		case int:
			s.Add(v)
		case string:
			s.Add(v)
		default:
			panic("Unsupported datatype")
		}
	}

	return s
}
// NewSet creates and initializes a Set
NewSet creates and initializes a Set
// NewSet creates and initializes a Set
func NewSet(data ...interface{}) *Set {
	s := NewEmptySet()
	for _, arg := range data {
		switch v := arg.(type) {
		case []int:
			for _, element := range v {
				s.Add(element)
			}
		case []string:
			for _, element := range v {
				s.Add(element)
			}
		case int:
			s.Add(v)
		case string:
			s.Add(v)
		default:
			panic("Unsupported datatype")
		}
	}
	return s
}
func NewSet ( data ... interface { } ) * Set { s := NewEmptySet ( ) for _ , arg := range data { switch v := arg . ( type ) { case [ ] int : for _ , element := range v { s . Add ( element ) } case [ ] string : for _ , element := range v { s . Add ( element ) } case int : s . Add ( v ) case string : s . Add ( v ) default : panic ( " " ) } } return s }
NewSet creates and initializes a Set
NewSet creates and initializes a Set