检查值是否已存在

28
我有一个字典,其中保存了我的书:
Dictionary<string, book> books

书的定义:

class book
{
    string author { get; set; }

    string title { get; set; }
} 

我已经向字典中添加了一些书籍。

如何检查字典中是否有与用户提供的标题匹配的书籍?


3
您需要为“<string,book>”中的“string”部分提供什么值? - zimdanen
4个回答

41
books.ContainsKey("book name");

8
他想知道这个东西(词典的值)是否包含一个已知标题属性的书籍,我认为是指书名,而不是词典键。 - Amaranth

39

如果你没有使用书名作为键,那么你将不得不枚举值,并查看是否有任何书包含该标题。

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");

谢谢,你的第一段代码很有帮助。关于LINQ,我以前从未尝试过。 - Bublik
目前在较新版本的 .net framework 中有 .ContainsValue 方法。请参见 @ https://msdn.microsoft.com/zh-cn/library/a63811ah(v=vs.110).aspx - nkalfov

6

如果允许使用LINQ,请尝试使用以下代码:

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

2

在你的字典中,键是否保存了标题?如果是,可以使用ContainsKey。如果键完全不同,并且你想检查值(Book对象)的title属性,你必须手动执行以下操作:

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

return String.Empty; //not found

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接