class CSet { private ArrayList ListData; public CSet() { ListData = new ArrayList(); } public CSet(ArrayList newSetData) { ListData = new ArrayList(); ListData.AddRange(newSetData); } public CSet(object[] items) { ListData = new ArrayList(); ListData.AddRange(items); } public void Add(object item) { if (!ListData.Contains(item)) { ListData.Add(item); } } public void AddRange(object[] item) { foreach (object i in item) { if (!ListData.Contains(i)) { ListData.Add(i); } } } public void Remove(object item) { if (ListData.Contains(item)) { ListData.Remove(item); } } public int Size() { return ListData.Count; } public string SetAsString() { if (ListData.Count == 0) { return "[]"; } else { string setOutput = "["; setOutput += ListData[0]; for (int i = 1; i < ListData.Count; i++) { setOutput = setOutput + ", " + ListData[i]; } setOutput += "]"; return setOutput; } } public bool IsInSet(object item) { return ListData.Contains(item); } public ArrayList Values { get { return ListData; } } public CSet Union(CSet setToAdd) { ArrayList addList = setToAdd.Values; CSet newSet = new CSet(addList); foreach (object o in ListData) { newSet.Add(o); } return newSet; } public CSet Difference(CSet setToSubtract) { ArrayList subList = setToSubtract.Values; CSet newSet = new CSet(ListData); foreach (object o in subList) { newSet.Remove(o); } return newSet; } public CSet Intersection(CSet setToIntersect) { CSet unionSet = Union(setToIntersect); CSet newSet = new CSet(); ArrayList addList = unionSet.Values; foreach (object o in addList) { if (ListData.Contains(o) && setToIntersect.IsInSet(o)) { newSet.Add(o); } } return newSet; } }