using System; using System.Collections.Generic; public class FastUniqueList { private readonly List list = []; private readonly HashSet set = []; public int Count => list.Count; public T this[int index] => list[index]; public IEnumerator GetEnumerator() => list.GetEnumerator(); public bool Contains(T item) { return set.Contains(item); } public bool Add(T item) { if (!set.Add(item)) { return false; } list.Add(item); return true; } public bool Remove(T item) { if (!set.Remove(item)) { return false; } int index = list.IndexOf(item); int last = list.Count - 1; list[index] = list[last]; list.RemoveAt(last); return true; } public void ForEach(Action action) { list.ForEach(action); } }