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

666 lượt xem 
 Cập nhật lần cuối: 25/04/2017 lúc 21:32:57

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

1
Để lại bình luận

avatar
1000
0 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
0 Comment authors
Recent comment authors
  Subscribe  
newest oldest most voted
Notify of