Cách hiệu quả nhất để lưu trữ danh sách các chuỗi bỏ qua bất kỳ bản sao nào? Tôi đã suy nghĩ một từ điển có thể chèn chuỗi tốt nhất bằng cách viết dict [str] = false; và liệt kê thông qua các phím như một danh sách. Đó có phải là một giải pháp tốt?Danh sách hiệu quả các chuỗi duy nhất C#
Trả lời
Nếu bạn đang sử dụng .NET 3.5, HashSet sẽ hoạt động cho bạn.
HashSet < (Trong số < (T>)>) lớp cung cấp hoạt động thiết lập hiệu suất cao. Tập hợp là bộ sưu tập không chứa các phần tử trùng lặp và có các thành phần không theo thứ tự cụ thể.
Đây không phải là một phần của không gian tên hệ thống nhưng đã sử dụng Iesi.Collections từ http://www.codeproject.com/KB/recipes/sets.aspx với NHibernate. Nó có hỗ trợ cho bộ băm cùng với bộ được sắp xếp, bộ từ điển, v.v. Kể từ khi nó đã được sử dụng với NHibernate nó đã được sử dụng rộng rãi và rất ổn định. Điều này cũng không đòi hỏi Net 3.5
Bạn có thể xem xét để làm một cái gì đó như thế này
var hash = new HashSet<string>();
var collectionWithDup = new []{"one","one","two","one","two","zero"};
// No need to check for duplicates as the Add method
// will only add it if it doesn't exist already
foreach (var str in collectionWithDup)
hash.Add(str);
Bạn không cần kiểm tra Chứa bằng một HashSet.Bạn chỉ có thể gọi phương thức Thêm trực tiếp và nó sẽ trả về true hoặc false tùy thuộc vào mục có tồn tại hay không. – LukeH
Câu trả lời phải được chỉnh sửa để xóa cuộc gọi thành dư thừa Chứa. Điều này tất cả bạn cần cho ví dụ trên để làm việc: var collectionWithDup = new [] {"một", "một", "hai", "một", "hai", "số không"}; var uniqueValues = new HashSet
Tôi không chắc chắn nếu điều này tính như là một câu trả lời tốt, nhưng khi phải đối mặt với sự cần thiết của một bộ duy nhất duy trì thứ tự chèn, tôi đã thỏa hiệp với một HashSet và một danh sách song song. Trong trường hợp này, bất cứ khi nào bạn thêm vào bộ này, hãy làm như sau:
if(hashSet.Add(item))
orderList.Add(item);
Khi xóa mục, hãy đảm bảo xóa chúng khỏi cả hai. Vì vậy, miễn là bạn có thể chắc chắn rằng không có gì khác thêm các mục vào danh sách, bạn sẽ có một bộ duy nhất được đặt hàng chèn!
Sử dụng HashSet, không cần kiểm tra .Contains(), chỉ cần thêm các mục của bạn vào danh sách và nếu nó trùng lặp, nó sẽ không thêm nó.
HashSet<int> uniqueList = new HashSet<int>();
uniqueList.Add(1); // List has values 1
uniqueList.Add(2); // List has values 1,2
uniqueList.Add(1); // List has values 1,2
Console.WriteLine(uniqueList.Count); // it will return 2
Đây là giải pháp khác mà không sử dụng HashSet
.
var items = new List<string>() { "one", "one", "two", "one", "two", "zero" };
var uniqueItems = items.Where((item, index) => items.IndexOf(item) == index);
Nó đã được thông qua từ chủ đề này: javascript - Unique values in an array
Test:
using FluentAssertions;
uniqueItems.Count().Should().Be(3);
uniqueItems.Should().BeEquivalentTo("one", "two", "zero");
thử nghiệm hiệu suất cho List
, HashSet
và SortedSet
. 1 triệu lần lặp:
List: 564 ms
HashSet: 487 ms
SortedSet: 1932 ms
Bạn cũng có thể sử dụng LINQ như trong:
using System.Linq;
var items = new List<string>() { "one", "one", "two", "one", "two", "zero" };
List<string> distinctItems = items.Distinct().ToList();
- 1. Danh sách duy nhất từ danh sách
- 2. Nhận các mục duy nhất từ danh sách danh sách?
- 3. Cách hiệu quả nhất để đọc một tệp thành danh sách các chuỗi
- 4. chuyển đổi danh sách các danh sách trong một danh sách duy nhất
- 5. Cách hiệu quả nhất của Python để chọn chuỗi dài nhất trong danh sách?
- 6. Danh sách hiệu quả nhất cho phương pháp data.frame?
- 7. Cách hiệu quả nhất để tách các chuỗi trong Python
- 8. Danh sách các danh sách LINQ trong một danh sách duy nhất
- 9. Cách nhanh nhất để tạo danh sách các chuỗi duy nhất từ trong vòng lặp?
- 10. Các mục đầu tiên trong danh sách bên trong hiệu quả nhất có thể
- 11. Hàm Python 3.3 để hợp nhất các giá trị duy nhất tạo thành nhiều danh sách thành một danh sách
- 12. Danh sách các đối tượng có thuộc tính duy nhất
- 13. Đọc danh sách Python, với các mục duy nhất
- 14. Lưu một danh sách các Strings duy nhất trong ArrayList
- 15. Làm phẳng danh sách các chuỗi và danh sách các chuỗi và danh sách bằng Python
- 16. Cách cập nhật danh sách các thực thể hiệu quả
- 17. tìm kiếm hiệu quả trong danh sách suffix
- 18. Python: cách tốt nhất/hiệu quả để tìm danh sách các từ trong văn bản?
- 19. Cách hiệu quả nhất để chọn hàng nghìn hàng từ danh sách các id
- 20. Cách hiệu quả nhất để tính tần suất của các giá trị trong danh sách Python?
- 21. Cách hiệu quả nhất để ngẫu nhiên "sắp xếp" (Trộn) một danh sách các số nguyên trong C#
- 22. Cách hiệu quả để thay thế danh sách chuỗi bằng một danh sách khác trong tệp Unix là gì?
- 23. Cách hiệu quả nhất để tra cứu/tìm kiếm trong một danh sách lớn (python)
- 24. dấu phẩy phân cách danh sách như là một chuỗi duy nhất, T-SQL
- 25. Cách hiệu quả để xóa danh sách trống khỏi danh sách?
- 26. Cách hiệu quả nhất để tìm xem một danh sách lớn có chứa một chuỗi cụ thể (Python)
- 27. Chuỗi dài nhất từ danh sách
- 28. hiệu quả chuỗi constructor
- 29. Cách hiệu quả nhất để phân tích cú pháp enum được gắn cờ thành danh sách
- 30. Cách nào hiệu quả nhất để lặp qua danh sách trong python?
Nhưng một 'HashSet' sẽ mất trật tự của các mặt hàng. Một tính năng mà một 'List' cung cấp. – aggsol
Bổ sung: Ngoài ra còn có SortedSet là một HashSet được sắp xếp thuận tiện. –
WhoIsRich
Cũng lưu ý rằng HashSet không thể được truy cập thông qua indice, chỉ thông qua một điều tra viên như trái ngược với một danh sách. – andrew