2012-05-03 11 views
13

Tengo diccionario que contiene mis libros: definitoncheque si el valor ya existe

Dictionary<string, book> books 

libro:

class book 
{ 
    string author { get; set; } 

    string title { get; set; } 
} 

he añadido algunos libros al diccionario.

¿Cómo puedo comprobar si hay un libro en el diccionario que coincida con el título proporcionado por el usuario?

+3

¿Qué valor proporciona para la parte de 'cadena' de ''? – zimdanen

Respuesta

19

Si no está utilizando el título del libro como la clave, tendrá que enumerar los valores y ver si algún libro contiene ese título.

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 
} 

O puede utilizar LINQ:

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

Si, por el contrario, se utiliza el título de los libros como la clave, entonces puede simplemente hacer:

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

GRACIAS, su primer código ayudó, que viene a LINQ, nunca lo he intentado antes – Bublik

+0

@ user1224225 Esta debería ser la respuesta aceptada – Antonio

+0

Hay .ContainsValue actualmente en una versión más nueva de .NET Framework. Ver @ https://msdn.microsoft.com/en-us/library/a63811ah(v=vs.110).aspx – Nikola

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

Quiere saber si contiene un libro (valor de dictionnary) con una propiedad de título conocida, creo, no la clave de dictionario. – Amaranth

+1

ya que OP seleccionó esto, puede ser eso lo que estaba pidiendo exactamente. – nawfal

1

En tu diccionario, ¿la tecla contiene el título? Si es así, use ContainsKey como las otras respuestas. Si la clave es algo completamente distinto, y que desea comprobar title atributo (del objeto libro) del valor, habría que hacerlo de forma manual como esto:

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

return String.Empty; //not found 
4

Si está permitido el uso de LINQ, trate de usar el siguiente código:

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