Tôi đã đọc câu hỏi này về lý do tại sao không thể thực hiện được, nhưng chưa tìm ra giải pháp cho vấn đề.
Tôi muốn lấy một mục từ .NET HashSet<T>
. Tôi đang tìm một phương pháp có chữ ký này:
/// <summary>
/// Determines if this set contains an item equal to <paramref name="item"/>,
/// according to the comparison mechanism that was used when the set was created.
/// The set is not changed. If the set does contain an item equal to
/// <paramref name="item"/>, then the item from the set is returned.
/// </summary>
bool TryGetItem<T>(T item, out T foundItem);
Tìm kiếm tập hợp cho một mục với phương pháp như vậy sẽ là O (1). Cách duy nhất để lấy một mục từ a HashSet<T>
là liệt kê tất cả các mục là O (n).
Tôi không tìm thấy bất kỳ giải pháp nào cho vấn đề này ngoài việc tự tạo HashSet<T>
hoặc sử dụng a Dictionary<K, V>
. Bất kỳ ý tưởng nào khác?
Lưu ý:
Tôi không muốn kiểm tra xem liệu HashSet<T>
có chứa mục hay không. Tôi muốn nhận tham chiếu đến mục được lưu trữ trong HashSet<T>
vì tôi cần cập nhật nó (mà không thay thế nó bằng một phiên bản khác). Mục mà tôi chuyển tới TryGetItem
sẽ bằng (theo cơ chế so sánh mà tôi đã chuyển cho hàm tạo) nhưng nó sẽ không phải là cùng một tham chiếu.