Tôi muốn so sánh hai bộ sưu tập (bằng C #), nhưng tôi không chắc chắn cách tốt nhất để thực hiện điều này một cách hiệu quả.
Tôi đã đọc các chủ đề khác về EnSable.SequenceEqual , nhưng nó không chính xác là những gì tôi đang tìm kiếm.
Trong trường hợp của tôi, hai bộ sưu tập sẽ bằng nhau nếu cả hai đều chứa cùng một mặt hàng (bất kể thứ tự).
Thí dụ:
collection1 = {1, 2, 3, 4};
collection2 = {2, 4, 1, 3};
collection1 == collection2; // true
Những gì tôi thường làm là lặp qua từng mục của một bộ sưu tập và xem nó có tồn tại trong bộ sưu tập khác không, sau đó lặp qua từng mục của bộ sưu tập khác và xem liệu nó có tồn tại trong bộ sưu tập đầu tiên không. (Tôi bắt đầu bằng cách so sánh độ dài).
if (collection1.Count != collection2.Count)
return false; // the collections are not equal
foreach (Item item in collection1)
{
if (!collection2.Contains(item))
return false; // the collections are not equal
}
foreach (Item item in collection2)
{
if (!collection1.Contains(item))
return false; // the collections are not equal
}
return true; // the collections are equal
Tuy nhiên, điều này không hoàn toàn chính xác và có lẽ đây không phải là cách hiệu quả nhất để so sánh hai bộ sưu tập cho sự bình đẳng.
Một ví dụ tôi có thể nghĩ rằng điều đó sẽ sai là:
collection1 = {1, 2, 3, 3, 4}
collection2 = {1, 2, 2, 3, 4}
Mà sẽ bằng với việc thực hiện của tôi. Tôi có nên đếm số lần mỗi mục được tìm thấy và đảm bảo số lượng bằng nhau trong cả hai bộ sưu tập không?
Các ví dụ có trong một số loại C # (hãy gọi nó là giả C #), nhưng đưa ra câu trả lời của bạn bằng bất kỳ ngôn ngữ nào bạn muốn, điều đó không thành vấn đề.
Lưu ý: Tôi đã sử dụng các số nguyên trong các ví dụ để đơn giản, nhưng tôi cũng muốn có thể sử dụng các đối tượng kiểu tham chiếu (chúng không hoạt động chính xác như các khóa vì chỉ so sánh tham chiếu của đối tượng, không phải nội dung).