Tôi có mảng 2 chuỗi:đếm các yếu tố giống hệt nhau trong hai mảng trong LINQ
A1: {"aa","bb","cc","dd","ee"}
A2: {"cc","dd,"ee","bla","blu"}
làm thế nào để đếm số lượng các yếu tố giống hệt nhau giữa A1
và A2
(trong trường hợp này 3)?
Tôi có mảng 2 chuỗi:đếm các yếu tố giống hệt nhau trong hai mảng trong LINQ
A1: {"aa","bb","cc","dd","ee"}
A2: {"cc","dd,"ee","bla","blu"}
làm thế nào để đếm số lượng các yếu tố giống hệt nhau giữa A1
và A2
(trong trường hợp này 3)?
Các ngắn nhất có lẽ sẽ là điều này:
A1.Intersect(A2).Count()
Đâ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
@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
@BlueVoodoo, vì lợi ích, a1.Count (a2.Contains); thắng với 00: 00: 05.7862636! – ericosg
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.
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
Vì lợi ích của lợi ích, giải pháp này chạy nhanh hơn Intersect() – ericosg
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
int[] id1 = { 44, 26, 92, 30, 71, 38 };
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };
id1.Intersect(id2).Count();
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" }
Bạn muốn xảy ra nếu có trùng lắp trong một trong những mảng gì? – Dan
Tôi muốn họ được tính là 1 trận đấu – user560498