Để tìm giao (intersection) của hai List trong C#, sử dụng phương thức Intersect() từ LINQ.
Ví dụ
using System;
using System.Collections.Generic;
using System.Linq;
namespace Demo
{
public class Program
{
public static void Main(string[] args)
{
List list1 = new List { 2, 3, 5, 7 };
List list2 = new List { 5, 4, 6, 8 };
Console.WriteLine("List 1: " + string.Join(", ", list1));
Console.WriteLine("List 2: " + string.Join(", ", list2));
List common = list1.Intersect(list2).ToList();
Console.WriteLine("Giao của hai list: " + string.Join(", ", common));
Console.WriteLine("Số phần tử chung: " + common.Count);
}
}
}
Kết quả
List 1: 2, 3, 5, 7 List 2: 5, 4, 6, 8 Giao của hai list: 5 Số phần tử chung: 1
Giải thích
Intersect()trả về các phần tử xuất hiện trong CẢ HAI list- Kết quả không trùng lặp (distinct)
- Sử dụng so sánh mặc định (
EqualityComparer<T>.Default)
Mở rộng: Để giữ trùng lặp hoặc so sánh tùy chỉnh, dùng Join hoặc viết thủ công. Intersect dùng set semantics.
Hiệu suất: O(n + m) với HashSet nội bộ, tốt hơn so với lặp lồng nhau O(n×m).