Cómo usar el método HashSet<string>.Contains()
en el modo -insensible?Cómo usar el HashSet <string>. Método Contieneins() en el modo de caso -insensible?
Respuesta
puede crear el HashSet
con un comparador personalizado:
HashSet<string> hs = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
hs.Add("Hello");
Console.WriteLine(hs.Contains("HeLLo"));
+1 Porque usa 'Ordinal' en lugar de' InvariantCulture'. Las directrices .NET nos aconsejan no utilizar 'InvariantCulture' en la mayoría de los casos (ver: http://msdn.microsoft.com/en-us/library/ms973919.aspx). – Steven
CurrentCultureIgnoreCase es generalmente la mejor opción. –
@HansPassant ¿por qué? – guiomie
Es necesario crear con la derecha IEqualityComparer
:
HashSet<string> hashset = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
Se debe utilizar la constructor que le permite especificar el IEqualityComparer
quieres usar
HashSet<String> hashSet = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);
El objeto StringComparer proporciona algunos comparador menudo utilizado como propiedades estáticas.
No es necesario aquí, como han demostrado otras respuestas, pero en otros casos donde no está utilizando una cadena, puede optar por implementar un IEqualityComparer<T>
y luego puede usar una sobrecarga .Contains
. Aquí hay un ejemplo con una cadena (una vez más, otras respuestas han demostrado que ya hay un comparador de cadenas que puede usar que satisfaga sus necesidades). Muchos métodos que rodean IEnumerable<T>
tienen sobrecargas que aceptan tales comparadores, por lo que es bueno aprender cómo implementarlos.
class CustomStringComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return x.Equals(y, StringComparison.InvariantCultureIgnoreCase);
}
public int GetHashCode(string obj)
{
return obj.GetHashCode();
}
}
y luego usarlo
bool contains = hash.Contains("foo", new CustomStringComparer());
- 1. Caso insensible find_or_create_by_whatever
- 2. ¿Cuándo debo usar el tipo HashSet <T>?
- 3. Caso insensible búsqueda variedad
- 4. Caso insensible ordenamiento especie en NHibernate
- 5. Doctrine LIKE caso insensible
- 6. ORACLE 11g caso insensible por defecto
- 7. ¿Hay un caso jQuery insensible: contiene el selector?
- 8. Caso insensible switch de los casos
- 9. JPA: realizar caso de orden insensible por
- 10. caso vim búsqueda insensible sensible reemplazar
- 11. C todo el contenido de HashSet <string>
- 12. Caso insensible a la sustitución PowerShell
- 13. Raíles: ActiveRecord db sort operación caso insensible
- 14. Caso insensible expresión regular Python sin re.compile
- 15. ¿Cómo habilitar el modo insensible al espacio en blanco de la expresión regular en PHP?
- 16. Consultando MongoDB (vía pymongo) en caso insensible eficientemente
- 17. HashSet contiene método, extraño comportamiento
- 18. Cómo usar el método Skin.AddPageMessage()?
- 19. Cómo usar el método onWindowFocusChanged()?
- 20. Cómo usar el método Moq.MockRepository.Of()
- 21. Llamando a Distinct <>() en HashSet <T>
- 22. Cómo usar el caso en donde la cláusula
- 23. Cómo usar el método addCustomRequestHeader en selenio?
- 24. ¿Cómo usar el método POST en Tornado?
- 25. ¿Cómo usar el método readline() en Java?
- 26. ¿Cómo usar el caso y ordenarlo en Nhibernate?
- 27. cómo usar vimdiff en el modo de comando VIM?
- 28. Cómo usar Tika en el modo de servidor
- 29. entendimiento contiene método de Java HashSet
- 30. Can .NET 4 ISet <> HashSet <> replace NHibernate Iesi.Collections ISet, HashSet?
Una sidenode: cuando un 'normal' '' HashSet (mayúsculas y minúsculas) se crea, es imposible crear un método 'contains' que sea eficiente. Esto porque los hashes de los elementos se crean cuando se agregan al 'HashSet'. E internamente, el método 'contains' comprueba que los hash sean eficientes. No es posible (eficientemente) convertir una forma de hash existente 'sensible a las mayúsculas y minúsculas' a 'insensible a mayúsculas y minúsculas'. –
Julian