public void Add(T a, Y b) { AgePair <T, Y> newPair = new AgePair <T, Y> { A = a, B = b }; var younger = GetYounger(newPair.A); foreach (var v in younger) { if (v.B.CompareTo(newPair.B) >= 0) { return; } } var elder = GetElder(newPair.A); List <AgePair <T, Y> > toDelete = new List <AgePair <T, Y> >(); foreach (var v in elder) { if (v.B.CompareTo(newPair.B) <= 0) { toDelete.Add(v); } } foreach (var v in toDelete) { m_List.Remove(v); } m_List.Add(newPair); m_List.Sort(CompareA); }
public void Add(T a, Y b) { AgePair <T, Y> newPair = new AgePair <T, Y> { A = a, B = b }; // Get all elements that are younger var younger = GetYounger(newPair.A); // Find any of the younger with a higher score // If found, return without inserting the element foreach (var v in younger) { if (v.B.CompareTo(newPair.B) >= 0) { return; } } // Cache elements to delete List <AgePair <T, Y> > toDelete = new List <AgePair <T, Y> >(); // Find all the elder elements var elder = GetElder(newPair.A); // Find all elder elements with a lower B foreach (var v in elder) { if (v.B.CompareTo(newPair.B) <= 0) { // Mark for delete toDelete.Add(v); } } // Delete those elements found above foreach (var v in toDelete) { m_List.Remove(v); } // Add the new element m_List.Add(newPair); // Sort the list (ascending by A) m_List.Sort(CompareA); }
private static int CompareA(AgePair <T, Y> item1, AgePair <T, Y> item2) { return(item1.A.CompareTo(item2.A)); }