چه تکنولوژی می‌خواهید یاد بگیرید؟

نظرات و انتقادات خود را با ما در میان بگذارید

آپدیت روزانه

بیش از 1500 مطلب آموزشی

نیازهای روز

سی‌شارپ: تفاضل دو لیست در C Sharp

چنانچه قصد داشته باشید مقادیر که در لیست نخست وجود دارد اما در لیست دوم موجود نیست را بیابید آنگاه می‌توان از متد جنریک الحاقی Except که در اسمبلی System.Core و در فضاءنام System.Linq وجود دارد استفاده نمود:

int[] temp  = Enumerable.Range(0, 11).ToArray();
int[] temp2 = temp.Except(new[] { 1, 2, 3 });

نتیجه temp2 فوق برابر است با:

0, 4, 5, 6, 7, 8, 9, 10

با توجه به مستندات مایکروسافت، بدنه متد جنریک الحاقی Except به صورت ذیل خواهد بود:

public static IEnumerable<TSource>
    Except<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second)
{
    if (first == null) throw Error.ArgumentNull("first");
    if (second == null) throw Error.ArgumentNull("second");
    return ExceptIterator<TSource>(first, second, null);
}

public static IEnumerable<TSource> Except<TSource>(this IEnumerable<TSource> first
    , IEnumerable<TSource> second, 
    IEqualityComparer<TSource> comparer)
{
    if (first == null) throw Error.ArgumentNull("first");
    if (second == null) throw Error.ArgumentNull("second");
    return ExceptIterator<TSource>(first, second, comparer);
}

static IEnumerable<TSource> ExceptIterator<TSource>(IEnumerable<TSource> first,
    IEnumerable<TSource> second,
    IEqualityComparer<TSource> comparer)
{
    Set<TSource> set = new Set<TSource>(comparer);
    foreach (TSource element in second) set.Add(element);
    foreach (TSource element in first)
        if (set.Add(element)) yield return element;
}


0 نظر:

تعداد دیدگاه‌های کاربران : 0 دیدگاه
مهمان گرامی! برای ارسال نظر نیاز است وارد سایت شوید.