以美学的方式获得最长和最短的弦乐

Sti*_*pen 12 c#

我的代码中有以下几行.他们占据的位置比应有的多.对较小代码的任何建议.

string longestString;
string shortestString;
if (string1.Length > string2.Length) 
{
   longestString = string1;
   shortestString = string2;
}
else 
{
   longestString = string2;
   shortestString = string1;
}
Run Code Online (Sandbox Code Playgroud)

我知道,这不是一个非常重要的问题,但这是整个方法的2/3,而不是重要的东西.

Tim*_*ter 17

也许:

int diff = string1.Length.CompareTo(string2.Length);
string longestString  = diff > 0 ? string1 : string2;
string shortestString = diff > 0 ? string2 : string1; 
Run Code Online (Sandbox Code Playgroud)

但是如果你有超过这两个字符串,并且你想要一个通用的解决方案,你可以使用:

var lenLookup = new[] { string1, string2 }.OrderBy(s => s.Length).ToList();
string shortestString = lenLookup.First();
string longestString = lenLookup.Last();
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 11

由于您的代码将始终执行if或else路径,因此选择一个作为"default"并将其与变量声明合并:

string longestString = string2
string shortestString = string1;
if (string1.Length > string2.Length) 
{
   longestString = string1;
   shortestString = string2;
}
Run Code Online (Sandbox Code Playgroud)

奖励指出您实际上将初始化这些变量的事实.

  • 需要注意的是,如果`string1`和`string2`在getted时不会引起副作用. (2认同)
  • @xanatos如果吸气剂导致副作用,那么你有一个更大的问题...... (2认同)

Dio*_* V. 6

好吧,你可以这样做来清除你的方法;

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);
Run Code Online (Sandbox Code Playgroud)

并随时重复使用它!

哎呀,让它更酷(与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);
}
Run Code Online (Sandbox Code Playgroud)

用法;

string longestString = GetLongestStrings("str1", "str2", /*...*/ "strN").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

编辑1:我的第一个实现不是最有效的.正如蒂姆所说;

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();
}
Run Code Online (Sandbox Code Playgroud)

用法;

string longestString = GetLongestString("str1", "str2", /*...*/ "strN");
Run Code Online (Sandbox Code Playgroud)