String.comparison performance (con recorte)
Necesito hacer un montón de comparaciones de cadenas de alto rendimiento que no distinguen entre mayúsculas y minúsculas y me di cuenta de que mi forma de hacerlo era .ToLower (). Trim () era realmente estúpido debido a que se asignaban todas las nuevas cadenas
Así que cavé un poco alrededor y de esta manera parece preferible:
String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)
El único problema aquí es que quiero ignorar los espacios iniciales o finales, es decir, Recortar (), pero si uso Recortar, tengo el mismo problema con las asignaciones de cadenas. Supongo que podría comprobar cada cadena y ver si comienza con ("") o EndsWith ("") y solo luego recortar. O eso o averiguar el índice, la longitud de cada cadena y pasar a cadena.
public static int Compare
(
string strA,
int indexA,
string strB,
int indexB,
int length,
StringComparison comparisonType
)
pero eso parece bastante desordenado y probablemente tenga que usar algunos enteros si no hago una declaración muy grande en caso de que no sea posible para cada combinación de espacios en blanco al final y al final en ambas cadenas ... ¿alguna idea de una solución elegante?
Aquí está mi propuesta actual:
public bool IsEqual(string a, string b)
{
return (string.Compare(a, b, StringComparison.OrdinalIgnoreCase) == 0);
}
public bool IsTrimEqual(string a, string b)
{
if (Math.Abs(a.Length- b.Length) > 2 ) // if length differs by more than 2, cant be equal
{
return false;
}
else if (IsEqual(a,b))
{
return true;
}
else
{
return (string.Compare(a.Trim(), b.Trim(), StringComparison.OrdinalIgnoreCase) == 0);
}
}