2010-02-15 54 views
40

Cho 2 mảng int, ví dụ: foo và bar, cách hiệu quả nhất để kiểm tra xem thanh mảng có chứa ít nhất một mục mà foo chứa không. phải trả về true/false.kiểm tra xem một mảng có chứa bất kỳ mục nào từ mảng khác

Tôi nghi ngờ việc lồng nhau nhưng chỉ tự hỏi liệu có cách nào đẹp hơn không.

+0

Đây có phải là bài tập về nhà không? Các mảng có tùy ý lớn hay nhỏ hơn 100 phần tử? Bạn đã thử bất cứ điều gì ngoài việc bạo lực? –

+0

không có bài tập về nhà của nó! ... chỉ cần tìm ra có lẽ là một cách hay để làm điều này. – raklos

Trả lời

87

Sử dụng LINQ:

array1.Intersect(array2).Any() 
+3

Sử dụng Any() đảm bảo rằng thuật toán giao lộ dừng khi tìm thấy đối tượng bằng nhau đầu tiên. – Olli

+5

ghi nhớ rằng tất cả mảng1 được liệt kê để bạn có thể muốn mảng ngắn hơn như array1 nếu có thể –

+2

Tôi chưa bao giờ nghe về phương pháp Intersect vì vậy tôi phải tìm kiếm nó: http://msdn.microsoft.com/vi -us/library/bb460136.aspx Về cơ bản nó cung cấp cho bạn một danh sách các mục được tìm thấy trong cả hai mảng được so sánh. Với toán tử bất kỳ, bạn biết nếu array1 và array2 có bất kỳ chuỗi nào giống nhau trong trường hợp này. – Stefanvds

1

Có lồng vòng, mặc dù là một trong những ẩn:

bool AnyAny(int[] A, int[]B) 
{ 
    foreach(int i in A) 
     if (B.Any(b=> b == i)) 
      return true; 
    return false; 
} 
6

C# 3:

bool result = bar.Any(el => foo.Contains(el)); 

C# 4 thực hiện song song:

bool result = bar.AsParallel().Any(el => foo.AsParallel().Contains(el)); 
+0

Trong trường hợp của tôi foo là chuỗi con của el. vì vậy, 'bool result = bar.Any (el => foo.Contains (el));' sẽ không đưa ra kết quả cần thiết. Bất kỳ đề xuất nào về cách triển khai truy vấn này? –

0

Đối với phương pháp tiếp cận một mảng ngẫu nhiên, phương pháp của bạn có vẻ là nhanh nhất. Có những phương pháp sẽ làm cho nó hiệu quả hơn nếu một hoặc cả hai ma trận được sắp xếp, giới hạn trên/dưới của chúng được biết, hoặc một trong số chúng thay đổi ít hơn so với phương pháp kia và bạn thực hiện nhiều kiểm tra. Thing là bạn có thể chuẩn bị nhiều băm, chỉ số và gợi ý để tối ưu hóa tìm kiếm gần như không có gì, nhưng quá trình lập chỉ mục một mình thường sẽ mất nhiều hơn một tìm kiếm.

Các vấn đề liên quan