nếu tự không quan trọng hoặc có thể là bản sao thì có lẽ:
public static class IEnumerableExtensions
{
public static bool HasSameContentsAs<T>(this ICollection<T> source,
ICollection<T> other)
{
if (source.Count != other.Count)
{
return false;
}
var s = source
.GroupBy(x => x)
.ToDictionary(x => x.Key, x => x.Count());
var o = other
.GroupBy(x => x)
.ToDictionary(x => x.Key, x => x.Count());
int count;
return s.Count == o.Count &&
s.All(x => o.TryGetValue(x.Key, out count) &&
count == x.Value);
}
}
sử dụng:
string[] a = { "a", "b", "c" };
string[] b = { "c", "a", "b" };
bool containSame = a.HasSameContentsAs(b);
một số trường hợp sử dụng:
khác nhau độ dài (mong đợi sai)
string[] a = { "a", "b", "c" };
string[] b = { "b", "c" };
thứ tự khác nhau (hy vọng đúng)
string[] a = { "a", "b", "c" };
string[] b = { "b", "c", "a" };
cũng hoạt động nếu đầu vào có thể chứa mục trùng lặp, mặc dù nó không phải là rõ ràng từ câu hỏi liệu đặc trưng đó là mong muốn hay không , hãy xem xét:
các mục trùng lặp có cùng số lượng (mong đợi là đúng)
string[] a = { "a", "b", "b", "c" };
string[] b = { "a", "b", "c", "b" };
mục lặp lại với số lượng khác nhau (hy vọng sai)
string[] a = { "a", "b", "b", "b", "c" };
string[] b = { "a", "b", "c", "b", "c" };
từ x trong một từ y trong b trong đó x == y chọn x == y nhưng nó không chính xác ... có thể không lưu trữ trong biến Boolean –
Mỗi mảng có giá trị duy nhất không? Khi bạn xem xét hai mảng giống nhau? nếu chúng có cùng yếu tố? các yếu tố giống nhau trong cùng một thứ tự? –
Bạn đang tìm kiếm một câu trả lời bool duy nhất nếu hai là hoàn toàn giống nhau hoặc bạn đang tìm kiếm một kiểm tra để xem nếu mỗi phần tử là giống như đối tác của nó. –