2012-04-11 41 views

Trả lời

26

Các ngắn nhất có lẽ sẽ là điều này:

A1.Intersect(A2).Count() 
+3

Đây là 3 ký tự ngắn hơn. A1.Count (A2.Contains) :) (Tôi vẫn thích giải pháp của bạn mặc dù) – BlueVoodoo

+0

@BlueVoodoo hiện phương pháp 'Count Contains' làm điều đúng trong sự hiện diện của bản sao? (xem bình luận làm rõ của người hỏi) – AakashM

+0

@BlueVoodoo, vì lợi ích, a1.Count (a2.Contains); thắng với 00: 00: 05.7862636! – ericosg

2

dưới đây hoạt động tốt và có thể tạo ra hiệu suất cao hơn khi sử dụng danh sách:

List<string> a1 = new List<string>() { "aa", "bb", "cc", "dd", "ee" }; 
List<string> a2 = new List<string>() { "cc", "dd", "ee", "bla", "blu" }; 

a1.Count(match => a2.Contains(match)); 

hoặc (nhờ @BlueVoodoo) một giải pháp ngắn hơn mà chỉ thực hiện hơi nhanh hơn:

a1.Count(a2.Contains); 

Nhưng các giải pháp này cũng tính tổng số trùng lặp e có thể sử dụng:

HashSet<string> a1 = new HashSet<string>() { "aa", "bb", "cc", "dd", "ee" }; 
HashSet<string> a2 = new HashSet<string>() { "cc", "dd", "ee", "bla", "blu" }; 

Tránh trùng lặp vì HashSet chỉ giữ một chuỗi duy nhất.

Sau khi đo điểm chuẩn ở trên, HashSet with a.Count (a2.Contains); cung cấp giải pháp nhanh nhất, ngay cả với chi phí xây dựng HashSet.

+0

Không cần phải đặt chúng trong danh sách vì bạn có thể làm A1.Count (A2.Contains) trực tiếp trên mảng (tôi vẫn sẽ đi cho giao lộ của Pavel mặc dù). – BlueVoodoo

+0

Vì lợi ích của lợi ích, giải pháp này chạy nhanh hơn Intersect() – ericosg

+0

Vì lợi ích của một số tiêu chuẩn: tại 10000000 lần lặp, Intersect vs Linq và Lambda: với danh sách: 00: 00: 09.9623558 và 00: 00: 06.2140126 với mảng: 00: 00: 09.5918331 và 00: 00: 48.9175518 một cách tự nhiên, linq tiếp tục tạo các đối tượng IEnumerable từ các mảng, tạo ra chi phí, nhưng một khi tất cả các danh sách thực sự nhanh hơn! – ericosg

2
int[] id1 = { 44, 26, 92, 30, 71, 38 }; 
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 }; 

id1.Intersect(id2).Count(); 
1

mã sau đây nên làm các trick

 var A1 = new[] { "aa", "bb", "cc", "dd", "ee"}; 
     var A2 = new[] { "cc", "dd", "ee", "bla", "blu" }; 

     var query = from one in A1 
        join two in A2 on one equals two 
        select one; 
     var result = query.ToArray();//this should have { "cc", "dd", "ee" } 
Các vấn đề liên quan