.NET 4.x Сравнение коллекций и последующая модификация - C#
Формулировка задачи:
Есть 2 коллекции Из второй коллекции удалили один айтем, как синхронизировать 2 коллекции? Т.е. и в первой удалить этот айтем?
ObservableCollection<CollectionItem> CollectionOne
и ObservableCollection<CollectionItem> CollectionTwo
содержащие по 5 айтемов.
public class CollectionItem() { public string Name {get;set;} public object SomeData {get;set;} }
Решение задачи: «.NET 4.x Сравнение коллекций и последующая модификация»
textual
Листинг программы
static class LinqExtensions { public static IEnumerable<TResult> FullOuterJoin<TOuter, TInner, TKey, TResult>( this IEnumerable<TOuter> outer, // "Левая" коллекция IEnumerable<TInner> inner, // "Правая" коллекция Func<TOuter, TKey> outerKeySelector, // Делегат для выбора ключа "левых" элементов Func<TInner, TKey> innerKeySelector, // Делегат для выбора ключа "правых" элементов Func<TKey, TOuter, TInner, TResult> resultSelector, // Делегат для выбора результата IEqualityComparer<TKey> keyComparer = null, // Опциональный comparer для ключа (например, StringComparer.InvariantCultureIgnoreCase для сравнения строк без учета регистра) TOuter defaultOuter = default(TOuter), // Значение "левого" элемента, если таковой не найден TInner defaultInner = default(TInner)) // Значение "правого" элемента, если таковой не найден { keyComparer = keyComparer ?? EqualityComparer<TKey>.Default; var left = outer.ToLookup(outerKeySelector, keyComparer); var right = inner.ToLookup(innerKeySelector, keyComparer); var distinct = new HashSet<TKey>(from entry in left select entry.Key); distinct.UnionWith(from entry in right select entry.Key); return from key in distinct from a in left[key].DefaultIfEmpty(defaultOuter) from b in right[key].DefaultIfEmpty(defaultInner) select resultSelector(key, a, b); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д