January 2004
Beginner to intermediate
864 pages
22h 18m
English
A Hashtable can
map only a single key to a single value, but you need to map a key to
one or more values. In addition, it may also be possible to map a key
to null.
Use a Hashtable whose values are
ArrayLists. This structure allows you to add
multiple values (in the ArrayList) for each key of
the Hashtable. The MultiMap
class, which is used in practically the same manner as a
Hashtable class, does
this:
using System; using System.Collections; public class MultiMap { private Hashtable map = new Hashtable( ); public ArrayList this[object key] { get {return ((ArrayList)map[key]);} set {map[key] = value;} } public void Add(object key, object item) { AddSingleMap(key, item); } public void Clear( ) { map.Clear( ); } public int Count { get {return (map.Count);} } public bool ContainsKey (object key) { return (map.ContainsKey(key)); } public bool ContainsValue(object item) { if (item == null) { foreach (DictionaryEntry de in map) { if (((ArrayList)de.Value).Count == 0) { return (true); } } return (false); } else { foreach (DictionaryEntry de in map) { if (((ArrayList)de.Value).Contains(item)) { return (true); } } return (false); } } public IEnumerator GetEnumerator( ) { return (map.GetEnumerator( )); } public void Remove(object key) { RemoveSingleMap(key); } public object Clone( ) { MultiMap clone = new MultiMap( ); foreach (DictionaryEntry de in map) { clone[de.Key] = (ArrayList)((ArrayList)de.Value).Clone( ); } return (clone); ...