Tôi có một Danh sách có các đối tượng trùng lặp. Để giải quyết điều đó, tôi cần chuyển đổi List thành một HashSet (trong C#). Có ai biết làm thế nào?Làm thế nào để chuyển đổi Danh sách <T> thành HashSet <T> trong C#?
Trả lời
Đảm bảo ghi đè lớp đối tượng của bạn Equals
và GetHashCode
và sau đó bạn có thể chuyển số List<T>
đến HashSet<T>
constructor.
var hashSet = new HashSet<YourType>(yourList);
Bạn có thể thấy: What is the best algorithm for an overridden System.Object.GetHashCode?
Một cách khác sẽ
var yourlist = new List<SomeClass>();
// [...]
var uniqueObjs = yourlist.Distinct(); //Gives you a List with unique Objects of the List.
Lưu ý rằng đây chỉ là có thể, nếu SomeClass
ghi đè GetHashCode
và Equals
một cách nào đó. Điều này cũng đúng đối với
var uniqueObjs = new HashSet<SomeType>(yourOriginalList);
Nếu không, bạn có thể triển khai riêng bạn IEqualityComnparer
-class và chuyển nó thành riêng biệt.
Lưu ý rằng với cách tiếp cận Distinct()
, bạn cũng có thể tìm kiếm giá trị tài sản riêng biệt của đối tượng trong danh sách:
var uniqueNames = yourlist.Select(obj => obj.Name).Distinct();
và một số chi tiết ...
Tôi thích câu trả lời này cho câu trả lời cho câu hỏi cụ thể. "Tôi muốn một ngôi nhà có 2 cánh cửa, vì vậy tôi sẽ làm căn nhà này với 1 cửa và xây một căn nhà mới từ đầu" – Phylogenesis
bạn sẽ cần phải thực hiện IEquatable trên 'SomeClass' để làm việc đó – Yohannes
@YTAM theo như tôi lo ngại, đây cũng là trường hợp nếu bạn muốn tạo một Hashset mới dựa trên danh sách gốc. – nozzleman
Nếu loại của bạn thực hiện IEquatable<T>
, Equals()
và GetHashCode()
chính xác, sau đó bạn không cần phải tự mình sao chép. Bạn có thể sử dụng số Distinct()
của Linq để làm như vậy:
myList = myList.Distinct().ToList();
- 1. Làm thế nào để chuyển đổi Danh sách <char> thành Danh sách <string> trong C#?
- 2. Chuyển đổi mảng thành HashSet <T> trong .NET
- 3. Làm thế nào để chuyển đổi System.Linq.Enumerable.WhereListIterator <int> thành Danh sách <int>?
- 4. C# Danh sách chuyển đổi <int> thành Danh sách <double>
- 5. chuyển đổi danh sách <int> thành danh sách <long>
- 6. Làm cách nào để chuyển đổi Danh sách <string> thành Danh sách <myEnumType>?
- 7. Làm thế nào để Chuyển đổi Danh sách <string> để ReadOnlyCollection <string> trong C#
- 8. Chuyển đổi BindingList <MyObject> thành Danh sách <MyObject> C#
- 9. Cách sử dụng biểu thức trình tạo CMake $ <TARGET_FILE: tgt>?
- 10. Làm cách nào tôi có thể chuyển đổi IEnumerable <T> thành Danh sách <T> trong C#?
- 11. Danh sách chuyển đổi <Integer> thành Danh sách <String>
- 12. C# Chuyển đổi Danh sách <string> thành Từ điển <string, string>
- 13. Không thể chuyển đổi Danh sách <KeyValuePair <...,...>> thành IEnumerable <object>?
- 14. Làm thế nào để chuyển đổi một IQueryable <T> thành một Danh sách <T>?
- 15. C# - var vào Danh sách <T> chuyển đổi
- 16. Cách chuyển đổi từ Danh sách <SomeParamType> thành Danh sách <SomeParamType <?>>
- 17. Chuyển đổi Danh sách <MyObject> thành Từ điển <obj.string, Danh sách <obj.ID>>
- 18. Chuyển đổi Danh sách <images> thành tệp video?
- 19. Danh sách chuyển đổi <Bản đồ <Chuỗi, Danh sách <String> >> thành chuỗi [] []
- 20. Chuyển đổi mảng chuỗi thành Danh sách <string>
- 21. Danh sách chuyển đổi <boolean> thành chuỗi
- 22. Làm cách nào để chuyển đổi Danh sách <T> thành Tập dữ liệu?
- 23. Chuyển đổi từ JsArray <JavaScriptObject> thành Danh sách <JSONObject> trong GWT
- 24. C# Danh sách <string[]> để liệt kê <object[]> Chuyển đổi
- 25. chuyển đổi List <Danh sách <string[]>> vào string [] [] [] trong C#
- 26. Chuyển đổi RealmResults <E> thành Danh sách <E> với copyFromRealm
- 27. Làm thế nào để serialize Danh sách <object>
- 28. Cách chuyển đổi EntityCollection <T> thành Danh sách <T>
- 29. chuyển đổi & lt thành <xml document
- 30. chuyển đổi dữ liệu vào danh sách <double> và danh sách <string> C#
Đây là danh sách, không phải là mảng. – qazwsxedcrfvtgbyhnujmikolp
Đối với loại câu hỏi này, cả hai đều là 'IList '. –
Richard
Câu trả lời giải quyết vấn đề— "HashSet có một hàm tạo có một IEnumerable". –