2012-05-03 243 views
13

我的字典持有我的書:檢查是否值已經存在

Dictionary<string, book> books 

書definiton:

class book 
{ 
    string author { get; set; } 

    string title { get; set; } 
} 

我已經添加了一些書字典。

如何檢查字典中是否有與用戶提供的標題匹配的圖書?

+3

你提供'''字符串'部分的值是什麼? – zimdanen

回答

19

如果您不使用書名作爲鍵,那麼您將不得不枚舉所有值並查看是否有任何書籍包含該標題。

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 
} 

或者你可以使用LINQ:

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

如果,另一方面,您使用的是書籍的標題爲重點,那麼你可以簡單地做:

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

謝謝,你的第一個代碼幫助,來到LINQ ,我從來沒有嘗試過 – Bublik

+0

@ user1224225這應該是公認的答案 – Antonio

+0

有.ContainsValue目前處於較新版本的.net框架中。請參閱@ https://msdn.microsoft.com/en-us/library/a63811ah(v=vs.110).aspx – Nikola

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

他想知道它是否包含我認爲具有已知標題屬性的書(字典的值),而不是字典的關鍵字。 – Amaranth

+1

自OP選擇了這個,可能是多數民衆贊成他所要求的確切.. – nawfal

1

在你的字典中,密鑰是否包含標題?如果是,則使用ContainsKey作爲其他答案。如果關鍵是別的東西完全,並且要檢查值的(Book對象的)title屬性,你不得不手動做這樣的:

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

return String.Empty; //not found 
4

如果你被允許使用LINQ,嘗試使用下面的代碼:

bool exists = books.Any(b => (b.Value != null && b.Value.title == "current title"));