public class CSet
{
private Hashtable data;
public CSet()
{
data = new Hashtable();
}
public void Add(object item)
{
if (!data.ContainsValue(item))
{
data.Add(Hash(item), item);
}
}
private string Hash(object item)//计算散列值
{
char[] chars;
string s = item.ToString();
int hashValue = 0;
chars = s.ToCharArray();
for (int i = 0; i <= chars.GetUpperBound(0);i++ )
{
hashValue += (int)chars[i];
}
return hashValue.ToString();
}
public void Remove(object item)
{
data.Remove(Hash(item));
}
public int Size()
{
return data.Count;
}
public CSet Union(CSet aSet)//两个集合合并
{
CSet tempSet = new CSet();
foreach (object hashObject in data.Keys)
{
tempSet.Add(this.data[hashObject]);
}
foreach (object hashObject in aSet.data.Keys)
{
if (!(this.data.ContainsKey(hashObject)))
{
tempSet.Add(aSet.data[hashObject]);
}
}
return tempSet;
}
public CSet Intersection(CSet aSet)
{
CSet tempSet = new CSet();
foreach (object hashObject in data.Keys)
{
if (aSet.data.Contains(hashObject))
{
tempSet.Add(aSet.data[hashObject]);
}
}
return tempSet;
}
public bool SubSet(CSet aSet)
{
if (this.Size()>aSet.Size())
{
return false;
}
else
{
foreach (object key in this.data.Keys)
{
if (!(aSet.data.Contains(key)))
{
return false;
}
}
}
return true;
}
public CSet Difference(CSet aSet)
{
CSet tempSet = new CSet();
foreach (object hashObject in data.Keys)
{
if (!(aSet.data.Contains(hashObject)))
{
tempSet.Add(data[hashObject]);
}
}
return tempSet;
}
public override string ToString()
{
string s = "";
foreach (object key in data.Keys)
{
s += data[key] + " ";
}
return s;
}
}
{
private Hashtable data;
public CSet()
{
data = new Hashtable();
}
public void Add(object item)
{
if (!data.ContainsValue(item))
{
data.Add(Hash(item), item);
}
}
private string Hash(object item)//计算散列值
{
char[] chars;
string s = item.ToString();
int hashValue = 0;
chars = s.ToCharArray();
for (int i = 0; i <= chars.GetUpperBound(0);i++ )
{
hashValue += (int)chars[i];
}
return hashValue.ToString();
}
public void Remove(object item)
{
data.Remove(Hash(item));
}
public int Size()
{
return data.Count;
}
public CSet Union(CSet aSet)//两个集合合并
{
CSet tempSet = new CSet();
foreach (object hashObject in data.Keys)
{
tempSet.Add(this.data[hashObject]);
}
foreach (object hashObject in aSet.data.Keys)
{
if (!(this.data.ContainsKey(hashObject)))
{
tempSet.Add(aSet.data[hashObject]);
}
}
return tempSet;
}
public CSet Intersection(CSet aSet)
{
CSet tempSet = new CSet();
foreach (object hashObject in data.Keys)
{
if (aSet.data.Contains(hashObject))
{
tempSet.Add(aSet.data[hashObject]);
}
}
return tempSet;
}
public bool SubSet(CSet aSet)
{
if (this.Size()>aSet.Size())
{
return false;
}
else
{
foreach (object key in this.data.Keys)
{
if (!(aSet.data.Contains(key)))
{
return false;
}
}
}
return true;
}
public CSet Difference(CSet aSet)
{
CSet tempSet = new CSet();
foreach (object hashObject in data.Keys)
{
if (!(aSet.data.Contains(hashObject)))
{
tempSet.Add(data[hashObject]);
}
}
return tempSet;
}
public override string ToString()
{
string s = "";
foreach (object key in data.Keys)
{
s += data[key] + " ";
}
return s;
}
}