detect changed element between 2 list

detect changed element between 2 list

private void DetectChange<T>(List<T> from, List<T> to,
    out List<T> added, out List<T> removed)
    where T : IEquatable<T>
{
    _Except(from, to, out added);
    _Except(to, from, out removed);

    void _Except<TT>(List<TT> from, List<TT> to, out List<TT> diff)
        where TT : IEquatable<TT>
    {
        diff = new List<TT>();
        var contain = false;
        for (int i = 0; i < from.Count; ++i)
        {
            contain = false;
            for (int k = 0; k < to.Count && !contain; ++k)
            {
                if (from[i].Equals(to[k]))
                {
                    contain = true;
                }
            }

            if (!contain)
            {
                diff.Add(from[i]);
            }
        }
    }
}

 

更簡單的寫法是用 Linq 

var from = new List<object>();
var to = new List<object>();

var added = from.Except(to).ToList();
var removed = to.Except(from).ToList();

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料