Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Tìm giao của hai List trong C#


Để 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).