【问题标题】:check if value already exists检查值是否已经存在
【发布时间】:2012-05-13 06:55:54
【问题描述】:

我有一本字典,里面有我的书:

Dictionary<string, book> books

书籍定义:

class book
{
    string author { get; set; }

    string title { get; set; }
} 

我在字典中添加了一些书。

如何检查词典中是否有与用户提供的书名相匹配的书?

【问题讨论】:

  • 你为''的'string'部分提供了什么价值?

标签: c# dictionary contains


【解决方案1】:
books.ContainsKey("book name");

【讨论】:

  • 他想知道它是否包含一本我认为具有已知标题属性的书(字典的值),而不是字典键。
【解决方案2】:

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

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

【讨论】:

【解决方案3】:

在您的字典中,键是否包含标题?如果是,请使用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"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2015-05-05
      相关资源
      最近更新 更多