2012-05-03 65 views
13

Tôi có từ điển mà giữ cuốn sách của tôi:kiểm tra nếu giá trị đã tồn tại

Dictionary<string, book> books 

Sách definiton:

class book 
{ 
    string author { get; set; } 

    string title { get; set; } 
} 

Tôi đã thêm một số cuốn sách vào từ điển.

Làm cách nào để kiểm tra xem có sách trong Từ điển khớp với tiêu đề do người dùng cung cấp không?

+3

Giá trị nào bạn cung cấp cho phần 'chuỗi' của ''? – zimdanen

Trả lời

19

Nếu bạn không sử dụng tiêu đề sách làm khóa, bạn sẽ phải liệt kê các giá trị và xem sách có chứa tiêu đề đó hay không.

foreach(KeyValuePair<string, book> b in books) // or foreach(book b in books.Values) 
{ 
    if(b.Value.title.Equals("some title", StringComparison.CurrentCultureIgnoreCase)) 
     return true 
} 

Hoặc bạn có thể sử dụng LINQ:

books.Any(tr => tr.Value.title.Equals("some title", StringComparison.CurrentCultureIgnoreCase)) 

Nếu, mặt khác, bạn đang sử dụng các tiêu đề sách là chìa khóa, sau đó bạn chỉ có thể làm:

books.ContainsKey("some title"); 
+0

CẢM ƠN BẠN, mã đầu tiên của bạn đã giúp, nói đến LINQ, tôi chưa bao giờ thử nó trước – Bublik

+0

@ user1224225 Điều này phải là câu trả lời được chấp nhận – Antonio

+0

Có .ContainsValue hiện có trong phiên bản mới hơn của .net framework. Xem @ https://msdn.microsoft.com/en-us/library/a63811ah(v=vs.110).aspx – Nikola

24
books.ContainsKey("book name"); 
+4

Ông muốn biết nếu nó có chứa một cuốn sách (giá trị của dictionnary) với một tài sản tiêu đề được biết đến tôi nghĩ, không phải là chìa khóa dictionnary. – Amaranth

+1

kể từ khi OP chọn này, có thể là thats những gì ông đã yêu cầu chính xác .. – nawfal

1

Trong từ điển của bạn, phím có giữ tiêu đề không? Nếu có, hãy sử dụng ContainsKey làm các câu trả lời khác. Nếu khóa là một cái gì đó khác hoàn toàn, và bạn muốn kiểm tra title thuộc tính của giá trị (Sách của đối tượng), bạn sẽ phải làm điều đó bằng tay như thế này:

foreach(KeyValuePair<string,book> kvp in books) { 
    if (kvp.Value.title == "some title") 
     return kvp.Key; 
} 

return String.Empty; //not found 
4

Nếu bạn được phép sử dụng LINQ, hãy thử sử dụng mã bên dưới:

bool exists = books.Any(b => (b.Value != null && b.Value.title == "current title")); 
Các vấn đề liên quan