2010-07-21 37 views
6

cách nhanh nhất để thực hiện một cái gì đó như thế này trong C# là gì:cách nhanh nhất để tìm chuỗi trong C#?

private List<string> _myMatches = new List<string>(){"one","two","three"}; 
    private bool Exists(string foo) { 
     return _myMatches.Contains(foo); 
    } 

lưu ý, đây chỉ là một ví dụ. tôi chỉ cần thực hiện lọc mức thấp trên một số giá trị bắt nguồn từ chuỗi. Tôi có thể thực tập chúng, nhưng vẫn cần hỗ trợ so sánh một hoặc nhiều chuỗi. Có nghĩa là, hoặc chuỗi để so sánh chuỗi (1 bộ lọc), hoặc nếu chuỗi tồn tại trong danh sách chuỗi (nhiều bộ lọc).

+0

điều này có vẻ nhanh để tôi ... – Luiscencio

+0

nhanh hơn với những gì bộ nhớ/pre-chế biến quá tải và những gì số lượng dữ liệu ? –

+0

..... cho danh sách. –

Trả lời

17

Bạn có thể làm điều này nhanh hơn bằng cách sử dụng một HashSet<T>, đặc biệt là nếu bạn đang đi để được thêm rất nhiều yếu tố:

private HashSet<string> _myMatches = new HashSet<string>() { "one", "two", "three" }; 

private bool Exists(string foo) 
{ 
    return _myMatches.Contains(foo); 
} 

chí này đánh bại List<T> từ HashSet<T>.Contains là một hoạt động O (1).

List<T> 's Chứa phương pháp, mặt khác, là O (N). Nó sẽ tìm kiếm toàn bộ danh sách (cho đến khi một kết quả phù hợp được tìm thấy) trên mỗi cuộc gọi. Điều này sẽ chậm hơn khi thêm nhiều phần tử.

+1

+1 - Tôi sẽ đi với cái này. Không giống như HashTables là thích hợp cho rằng nó không lưu trữ các cặp thông tin. Suy nghĩ tức thì của tôi là từ điển, nhưng tôi đã loại bỏ nó vì lý do tương tự khi tôi loại bỏ HashTable. – BenAlabaster

+0

cảm ơn, bạn có nghĩ rằng việc thực hiện các chuỗi sẽ giúp ích không? –

+0

Một vài điều ngẫu nhiên: điều này giả định rằng cấu trúc chỉ nên chứa các giá trị duy nhất và thời gian lấp đầy và mức tiêu thụ bộ nhớ không liên quan. –

0

Bảng băm là bạn bè của bạn để tra cứu chuỗi nhanh.

Hãy nhìn vào một hướng dẫn tốt tại Working with HashTable in C# 2.0

+2

Sử dụng HashSet tốt hơn vì nó an toàn và được thiết kế chính xác cho loại thao tác này. –

+0

:-) ngay bên phải bạn là –

0

Bạn sẽ phải lập hồ sơ. Và bạn có nghĩa là tra cứu nhanh nhất (tức là, thời gian khởi tạo)?

@Elf vua đã đề cập Bàn Hash, mà tôi sẽ chỉ cho bạn tại (đặc biệt HashSet<T>)

+0

Yep! HashSet âm thanh như một điều tốt! –

+0

khởi tạo không quan trọng, chỉ cần tra cứu. cảm ơn –

Các vấn đề liên quan