Không có, không và có thể không, ít nhất là tôi sẽ tin như vậy. Lý do đằng sau là sự bình đẳng trong bộ sưu tập có lẽ là một hành vi do người dùng xác định.
Các yếu tố trong các bộ sưu tập không được coi là theo một thứ tự cụ thể mặc dù chúng có thứ tự một cách tự nhiên, đó không phải là thuật toán so sánh nên dựa vào. Giả sử bạn có hai bộ sưu tập:
{1, 2, 3, 4}
{4, 3, 2, 1}
Họ có bằng nhau hay không? Bạn phải biết nhưng tôi không biết quan điểm của bạn là gì.
Các bộ sưu tập được sắp xếp theo khái niệm theo mặc định, cho đến khi các thuật toán cung cấp các quy tắc sắp xếp. Điều tương tự máy chủ SQL sẽ khiến bạn chú ý là khi bạn cố gắng phân trang, nó yêu cầu bạn cung cấp các quy tắc sắp xếp:
https://docs.microsoft.com/en-US/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-2017
Một bộ sưu tập khác:
{1, 2, 3, 4}
{1, 1, 1, 2, 2, 3, 4}
Một lần nữa, họ có bằng nhau hay không? Bạn nói với tôi ..
Độ lặp lại thành phần của bộ sưu tập đóng vai trò của nó trong các tình huống khác nhau và một số bộ sưu tập như Dictionary<TKey, TValue>
thậm chí không cho phép các yếu tố lặp lại.
Tôi tin rằng các loại bình đẳng này là ứng dụng được xác định và do đó khung không cung cấp tất cả các triển khai có thể.
Vâng, trong trường hợp chung Enumerable.SequenceEqual
là đủ tốt nhưng nó trả về sai trong trường hợp sau:
var a = new Dictionary<String, int> { { "2", 2 }, { "1", 1 }, };
var b = new Dictionary<String, int> { { "1", 1 }, { "2", 2 }, };
Debug.Print("{0}", a.SequenceEqual(b)); // false
Tôi đọc một số câu trả lời cho các câu hỏi như thế này (bạn có thể google cho họ) và những gì tôi sẽ sử dụng, nói chung:
public static class CollectionExtensions {
public static bool Represents<T>(this IEnumerable<T> first, IEnumerable<T> second) {
if(object.ReferenceEquals(first, second)) {
return true;
}
if(first is IOrderedEnumerable<T> && second is IOrderedEnumerable<T>) {
return Enumerable.SequenceEqual(first, second);
}
if(first is ICollection<T> && second is ICollection<T>) {
if(first.Count()!=second.Count()) {
return false;
}
}
first=first.OrderBy(x => x.GetHashCode());
second=second.OrderBy(x => x.GetHashCode());
return CollectionExtensions.Represents(first, second);
}
}
Điều đó có nghĩa là một bộ sưu tập đại diện cho các bộ phận khác trong các yếu tố của chúng bao gồm cả thời gian lặp đi lặp lại mà không tính đến thứ tự ban đầu. Một số lưu ý khi thực hiện:
GetHashCode()
chỉ dành cho trật tự không vì sự bình đẳng; Tôi nghĩ rằng nó là đủ trong trường hợp này
Count()
sẽ không thực sự liệt kê bộ sưu tập và trực tiếp rơi vào việc thực hiện tài sản của ICollection<T>.Count
Nếu các tham chiếu bằng nhau, thì đó chỉ là Boris
IList
? Câu hỏi mơ hồ.