This is not meant to solve any insane real world problems. I just want to make sure my Set logic is right and the code looks okay. It feels weird implementing it with a Dictionary
of dummy values but it seems that's how most languages do it anyway. What do you think?
public class Set : IEnumerable
{
private readonly Dictionary<object, bool> _items;
public Set()
{
_items = new Dictionary<object, bool>();
}
public void Add(object item)
{
if (!_items.ContainsKey(item))
{
_items.Add(item, true);
}
}
public void Remove(object item)
{
if (_items.ContainsKey(item))
{
_items.Remove(item);
}
}
public bool Contains(object item)
{
return _items.ContainsKey(item);
}
public int Count()
{
return _items.Keys.Count;
}
public void Clear()
{
_items.Clear();
}
public void UnionWith(Set input)
{
foreach (var item in input.Cast<object>().Where(item => !_items.ContainsKey(item)))
{
_items.Add(item, true);
}
}
public void IntersectWith(Set input)
{
var newSet = new Set();
foreach (var item in _items.Keys.Where(input.Contains))
{
newSet.Add(item);
}
Clear();
foreach (var item in newSet)
{
_items.Add(item, true);
}
}
public void DifferenceWith(Set input)
{
var newSet = new Set();
foreach (var item in _items.Keys.Where(item => !input.Contains(item)))
{
newSet.Add(item);
}
Clear();
foreach (var item in newSet)
{
_items.Add(item, true);
}
}
public bool IsSubsetOf(Set input)
{
return _items.Keys.All(input.Contains);
}
public IEnumerator GetEnumerator()
{
return _items.Keys.GetEnumerator();
}
}
DifferenceWith()
is calledExceptWith()
? \$\endgroup\$