public override void ReEvaluate() { foreach (KeyValuePair <TSource, GroupAndElement> pair in _outputShadowMap) { TSource item = pair.Key; GroupAndElement info = pair.Value; MaybeMoveItem(item, info); } }
private void MaybeMoveItem(TSource item, GroupAndElement info) { TKey newKey = _keySelector(item); TElement newElement = _elementSelector(item); if (info.Group.Key.Equals(newKey) == false || info.Element.Equals(newElement) == false) { RemoveItem(item); AddItem(item, newElement); } }
private void AddItem(TSource item, TElement element) { TKey theKey = _keySelector(item); GroupedContinuousCollection <TKey, TElement> outputGroup; if (_groupMap.TryGetValue(theKey, out outputGroup) == false) { outputGroup = new GroupedContinuousCollection <TKey, TElement>(theKey, _comparer); this.OutputCollection.Add(outputGroup); _groupMap[theKey] = outputGroup; } try { outputGroup.IsSealed = false; outputGroup.Add(element); } finally { outputGroup.IsSealed = true; } _outputShadowMap[item] = new GroupAndElement(outputGroup, element); }