天天看點

C# 判斷兩個清單(集合) 是否一緻

C# 判斷兩個清單(集合) 是否一緻

public static Class CollectionHelper{
    
        /// <summary>
        /// 判斷兩個集合是否相等
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sourceCollection">源清單</param>
        /// <param name="targetCollection">目标清單</param>
        /// <param name="comparable">判斷相等的方法</param>
        /// <returns></returns>
        public static bool EqualList<T>(this IList<T> sourceCollection, IList<T> targetCollection, Func<T, T, bool> comparable) where T : class
        {
            //空集合直接傳回False,即使是兩個都是空集合,也傳回False
            if (sourceCollection == null || targetCollection == null)
            {
                return false;
            }

            if (object.ReferenceEquals(sourceCollection, targetCollection))
            {
                return true;
            }

            if (sourceCollection.Count != targetCollection.Count)
            {
                return false;
            }
            foreach (var s in sourceCollection)
            {
                Action func = null;
                foreach (var t in targetCollection)
                {
                    if (comparable(s, t))
                    {
                        func = () => { targetCollection.Remove(t); };
                        break;
                    }
                }
                if (func == null)
                return false;
                func?.Invoke();
            }

            if (targetCollection.Count == 0)
                return true;

            return false;
        }
    }
    
    
    
    public class Temp{
        public string a {get;set;}
        public string b {get;set;}
        public string c {get;set;}
    }
    
    
    main(){
        List<Temp> source=new List<Temp>();
        List<Temp> target=new List<Temp>();
        Console.WriteLine(source.EqualList(target, (s, t) => s.a == t.b)))
    }