Tôi có một danh sách các chuỗi chứa khoảng 7 triệu mục trong một tệp văn bản có kích thước 152MB. Tôi đã tự hỏi những gì có thể là cách tốt nhất để thực hiện một chức năng mà có một chuỗi duy nhất và trả về cho dù đó là trong danh sách các chuỗi.Ghép nối một chuỗi trong một tệp văn bản lớn?
Trả lời
Bạn sẽ phải đối sánh với tệp văn bản này nhiều lần? Nếu có, tôi sẽ tạo một HashSet<string>
. Nếu không, chỉ cần đọc nó từng dòng (tôi giả sử có một chuỗi trên mỗi dòng) và xem liệu nó có khớp không.
152MB ASCII sẽ kết thúc với hơn 300MB dữ liệu Unicode trong bộ nhớ - nhưng trong các máy hiện đại có nhiều bộ nhớ, do đó, giữ toàn bộ lô trong HashSet<string>
sẽ thực hiện tra cứu lặp lại rất nhanh.
Các tuyệt đối đơn giản nhất cách để làm điều này là có thể sử dụng File.ReadAllLines
, mặc dù điều đó sẽ tạo ra một mảng mà sau đó sẽ bị loại bỏ - không tuyệt vời cho sử dụng bộ nhớ, nhưng có lẽ không phải là quá xấu:
HashSet<string> strings = new HashSet<string>(File.ReadAllLines("data.txt"));
...
if (strings.Contains(stringToCheck))
{
...
}
Phụ thuộc vào những gì bạn muốn làm. Khi bạn muốn lặp lại việc tìm kiếm các kết quả trùng khớp lặp đi lặp lại, tôi sẽ tải toàn bộ tệp vào bộ nhớ (vào một số HashSet
). Có rất dễ dàng để tìm kiếm các trận đấu.
- 1. Làm cách nào để ghép nối hai dòng của một tệp văn bản với Bash?
- 2. Ghép nối nhiều tệp CSS thành một
- 3. Ghép nối chuỗi trong VBA
- 4. C# - Đọc trong một tệp văn bản lớn (150MB) vào Hộp văn bản có dạng thức
- 5. Java OutOfMemoryError khi đọc một tệp văn bản lớn
- 6. Đọc một tệp văn bản lớn vào Textview
- 7. Làm cách nào để ghép nối hai tệp văn bản trong PowerShell?
- 8. Làm cách nào để nối văn bản vào một tệp văn bản trong C++?
- 9. Python: ghép nối các byte với một chuỗi
- 10. Làm cách nào để nối văn bản vào một tệp?
- 11. JQuery - Cách ghép nối văn bản với .each?
- 12. Ghép nối một vectơ của chuỗi/ký tự
- 13. Tôi có thể ghép nối một số và chuỗi không?
- 14. Ghép nối các chuỗi với
- 15. Đọc một tệp văn bản trong java
- 16. Làm cách nào để chuyển đến một dòng cụ thể trong một tệp văn bản lớn?
- 17. chèn chuỗi trong tệp lớn
- 18. Chuỗi ghép nối Định dạng chuỗi VS
- 19. C#: Gắn thêm * nội dung * của một tệp văn bản vào một tệp văn bản khác
- 20. Thay thế một dòng trong một tệp văn bản
- 21. Cách chèn một chuỗi vào một văn bản
- 22. Đọc các tệp văn bản lớn có dòng trong C#
- 23. Ghép nối trong smarty
- 24. Cách nhanh nhất để chuyển đổi danh sách các chuỗi thành một chuỗi được ghép nối?
- 25. Tìm các chuỗi trùng lặp trong một tệp lớn
- 26. Cách tìm chuỗi trong tệp văn bản?
- 27. Làm thế nào để ghi một tệp văn bản lớn vào C# một cách hiệu quả?
- 28. jQuery thêm chuỗi và không ghép nối
- 29. Thêm/ghép nối hai chuỗi IEnumerable
- 30. Nối văn bản vào tệp bằng Python
Thực ra tôi phải tìm kiếm lặp đi lặp lại. Nhưng tôi sẽ sử dụng nó trong một ứng dụng web. Bộ nhớ sẽ trở thành một vấn đề với nhiều yêu cầu? –
@Taz: Số yêu cầu không liên quan, miễn là bạn xây dựng bản băm chỉ một lần :) Theo tài liệu: * Mọi thành viên tĩnh công khai thuộc loại này là an toàn chủ đề *, vì vậy không có vấn đề gì ở đây, quá – tanascius
@Taz : tanascius là đúng. Tải nó lên một lần và bạn sẽ có thể tìm kiếm (sử dụng nhiều chủ đề đồng thời, thậm chí - miễn là không có gì ghi vào nó) mà không cần sử dụng thêm bộ nhớ. Vì vậy, miễn là máy chủ web của bạn có đủ bộ nhớ để giữ các thiết lập, đó là con đường để đi. –