10.5. Creating a One-to-Many Map (MultiMap)
Problem
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
.
Solution
Use a Hashtable
whose values are
ArrayList
s. 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); ...
Get C# Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.