web-dev-qa-db-ja.com

値がすでに存在するかどうかを確認します

私の本を保持する辞書があります:

Dictionary<string, book> books

ブック定義:

class book
{
    string author { get; set; }

    string title { get; set; }
} 

辞書に本をいくつか追加しました。

ユーザーが提供したタイトルと一致する本が辞書にあるかどうかを確認するにはどうすればよいですか?

18
Bublik

書籍のタイトルをキーとして使用していない場合は、値を列挙し、書籍にそのタイトルが含まれているかどうかを確認する必要があります。

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");
29
SPFiredrake
books.ContainsKey("book name");
32
Brendan

LINQの使用が許可されている場合は、次のコードを使用してみてください。

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

辞書で、キーはタイトルを保持していますか?はいの場合、他の回答としてContainsKeyを使用します。キーがまったく別のものであり、値の(Bookオブジェクトの)title属性を確認する場合は、次のように手動で行う必要があります。

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

return String.Empty; //not found
2
xbonez