Ngôn ngữ LINQ - Tìm sự khác biệt giữa hai danh sách List
Tìm sự khác biệt giữa hai danh sách List
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;
public class Program
{
public static void Main()
{
// Hai danh sách List với mỗi phần tử kiểu chuỗi --- hiepsiit.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!");
}
}
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.