12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace ET
- {
- public class MultiMapSet<T, K>: SortedDictionary<T, HashSet<K>>
- {
- private readonly HashSet<K> Empty = new HashSet<K>();
-
- public void Add(T t, K k)
- {
- HashSet<K> list;
- this.TryGetValue(t, out list);
- if (list == null)
- {
- list = new HashSet<K>();
- this.Add(t, list);
- }
- list.Add(k);
- }
- public bool Remove(T t, K k)
- {
- HashSet<K> list;
- this.TryGetValue(t, out list);
- if (list == null)
- {
- return false;
- }
- if (!list.Remove(k))
- {
- return false;
- }
- if (list.Count == 0)
- {
- this.Remove(t);
- }
- return true;
- }
- /// <summary>
- /// 不返回内部的list,copy一份出来
- /// </summary>
- /// <param name="t"></param>
- /// <returns></returns>
- public K[] GetAll(T t)
- {
- HashSet<K> list;
- this.TryGetValue(t, out list);
- if (list == null)
- {
- return Array.Empty<K>();
- }
- return list.ToArray();
- }
- /// <summary>
- /// 返回内部的list
- /// </summary>
- /// <param name="t"></param>
- /// <returns></returns>
- public new HashSet<K> this[T t]
- {
- get
- {
- this.TryGetValue(t, out var list);
- return list ?? Empty;
- }
- }
- public K GetOne(T t)
- {
- HashSet<K> list;
- this.TryGetValue(t, out list);
- if (list != null && list.Count > 0)
- {
- return list.FirstOrDefault();
- }
- return default;
- }
- public bool Contains(T t, K k)
- {
- HashSet<K> list;
- this.TryGetValue(t, out list);
- if (list == null)
- {
- return false;
- }
- return list.Contains(k);
- }
- }
- }
|