String.comparison wydajność (z wykończeniem)
Muszę wykonać wiele wysokowydajnych porównań łańcuchów bez rozróżniania wielkości liter i uświadomić sobie, że mój sposób na to .ToLower (). Trim () był naprawdę głupi z powodu przydzielania wszystkich nowych ciągów
Więc trochę się przekopałem i ten sposób wydaje się lepszy:
String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)
Jedynym problemem jest to, że chcę zignorować spacje wiodące lub końcowe, tj. Trim (), ale jeśli używam Przytnij, mam ten sam problem z przydzielaniem ciągów. Myślę, że mógłbym sprawdzić każdy ciąg i sprawdzić, czy zaczyna się od ("") lub EndsWith ("") i tylko wtedy Trim. Albo wymyśl indeks, długość każdego łańcucha i przekaż do string. Porównaj zastąpienie
public static int Compare
(
string strA,
int indexA,
string strB,
int indexB,
int length,
StringComparison comparisonType
)
ale to wydaje się dość niechlujne i prawdopodobnie muszę użyć kilku liczb całkowitych, jeśli nie zrobię naprawdę dużej instrukcji if-else dla każdej kombinacji końcowych i wiodących spacji na obu łańcuchach ... więc wszelkie pomysły na eleganckie rozwiązanie?
Oto moja obecna propozycja:
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);
}
}