[LINQ và chuỗi] Phần 5: Tìm sự khác biệt giữa hai danh sách List

162 lượt xem

Trong bài này, chúng ta sẽ tìm hiểu 1 ví dụ so sánh 2 danh sách kiểu List với mỗi phần tử kiểu chuỗi (String) sử dụng truy vấn LINQ. Kết quả tìm được là các phần tử chỉ xuất hiện ở danh sách list1 nhưng không xuất hiện ở danh sách list2.

Ví dụ list1 gồm có 4 phần tử “a”, “b”, “c”, “d” và list2 cũng có 4 phần tử “a”, “b”, “e”, “f”. Chúng ta có thể nhận trực diện trực quan rằng phần tử “c” và “d” xuất hiện ở danh sách list1 mà không có trong danh sách list2. Đoạn mã sau giúp chúng ta thực hiện điều đó bằng LINQ.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace LINQ2String
{
    class Program
    {
        static void Main(string[] args)
        {
            // Hai danh sách List với mỗi phần tử kiểu chuỗi --- dammio.com
            List<string> list1 = new List<string>() { "a", "b", "c", "d" };
            List<string> list2 = new List<string>() { "a", "b", "e", "f" };

            // Phương thức Except để dò tìm phần tử ở list1 nhưng không có ở list2
            IEnumerable<string> differenceQuery = list1.Except(list2);
             
            // Xuất kết quả ra màn hình
            Console.WriteLine("Cac phan tu xuat hien o list1 nhung khong xuat hien o list2:");
            foreach (string s in differenceQuery)
            {
                Console.WriteLine("\t" + s);
            }

            // Giữ cửa sở luôn mở trong chế độ debug  
            Console.WriteLine("Nhan bat ky phim nao de thoat!");
            Console.ReadKey();  
        }

    }
}

Trong ví dụ trên phương thức Except được dùng dể dò tìm các phần tử thuộc list1 nhưng không thuộc list2. Một số toán tử truy vấn trong C# như Except<TSource>, Distinct<TSource>, Union<TSource>, và Concat, có thể được diễn giải bằng trong cú pháp cơ bản.

Nếu không thích dùng Except bạn cũng có thể dùng LINQ thuần như sau:

// Phương thức Except để dò tìm phần tử ở list1 nhưng không có ở list2
            IEnumerable<string> differenceQuery = list1.Where(x => !list2.Contains(x));

Kết luận: Bài viết đã nêu ra ví dụ về việc tìm sự sai khác giữa 2 danh sách. Hi vọng các bạn nắm bắt được để áp dụng xây dựng ứng dụng cho riêng mình.

Bình luận Facebook

Để lại bình luận

Hãy là người đầu tiên bình luận!

Thông báo khi có
avatar
1000
wpDiscuz