2012-05-03 52 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"));