Tengo las siguientes líneas en mi código. Están ocupando más lugar del que deberían. Cualquier sugerencia para un código más pequeño.
string longestString; string shortestString; if (string1.Length > string2.Length) { longestString = string1; shortestString = string2; } else { longestString = string2; shortestString = string1; }Lo sé, no es una pregunta realmente importante, pero esto toma 2/3 de todo el método y no las cosas importantes.
Quizás:
int diff = string1.Length.CompareTo(string2.Length); string longestString = diff > 0 ? string1 : string2; string shortestString = diff > 0 ? string2 : string1;Pero si tiene más de estas dos cadenas y desea una solución general, puede usar:
var lenLookup = new[] { string1, string2 }.OrderBy(s => s.Length).ToList(); string shortestString = lenLookup.First(); string longestString = lenLookup.Last();Dado que su código siempre realizaría la ruta si o si no, elija una como "predeterminada" y combínela con la declaración de variable:
string longestString = string2 string shortestString = string1; if (string1.Length > string2.Length) { longestString = string1; shortestString = string2; }Puntos de bonificación por el hecho de que realmente inicializará esas variables.
Bueno, podrías hacer esto para aclarar tu método;
public string GetLongestString(string str1, string str2) { return str1.Length > str2.Length ? str1 : str2; } public string GetShortestString(string str1, string str2) { return str1.Length > str2.Length ? str2 : str1; } string longestString = GetLongestString(string1, string2); string shortestString = GetShortestString(string1, string2);¡Y reutilízalo cuando quieras!
Diablos, hazlo aún más genial (en modo cooperativo con Tim);
public IEnumerable<string> GetLongestStrings(params string[] strings) { //returns first string with largest length out of given argumenst int maxSize = strings.Max(str => str.Length); return strings.Where(s => s.Length == maxSize); } public IEnumerable<string> GetShortestStrings(params string[] strings) { //returns first string with shortest length out of given arguments int minSize = strings.Min(str => str.Length); return strings.Where(s => s.Length == minSize); }Uso;
string longestString = GetLongestStrings("str1", "str2", /*...*/ "strN").FirstOrDefault();EDIT1: Mi primera implementación no es la más eficiente. Como sugirió Tim;
public string GetLongestString(params string[] strings) { return strings.OrderBy(s => s.Length).First(); } public string GetShortestString(params string[] strings) { return strings.OrderByDescending(s => s.Length).First(); }Uso;
string longestString = GetLongestString("str1", "str2", /*...*/ "strN");