private void merge(ref List <Group> groups, GroupSearch search) { if (groups.Count == 0) { return; } Dictionary <uint, uint> duplicates = new Dictionary <uint, uint>(groups.Count); for (int i = groups.Count - 1; i >= 0; i--) { if (false == duplicates.TryGetValue(groups[i].GID, out uint throwAway)) { duplicates.Add(groups[i].GID, groups[i].GID); } else { groups.RemoveAt(i); continue; } if (false == search.CheckSearch(groups[i])) { groups.RemoveAt(i); } } }