using System.Collections; using System.Collections.Generic; namespace Dashboard { public class HashList : IReadOnlyList where T : notnull { private readonly List _list = new List(); private readonly Dictionary _map = new Dictionary(); public T this[int index] => _list[index]; public int Count => _list.Count; public int Intern(T value) { if (_map.TryGetValue(value, out int index)) return index; index = Count; _list.Add(value); _map.Add(value, index); return index; } public void Clear() { _list.Clear(); _map.Clear(); } public IEnumerator GetEnumerator() => _list.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => _list.GetEnumerator(); } }