簡體   English   中英

以美學的方式獲得最長和最短的弦樂

[英]Get longest and shortest string in a esthetical way

我的代碼中有以下幾行。 他們占據了比他們應該更多的地方。 對較小代碼的任何建議。

string longestString;
string shortestString;
if (string1.Length > string2.Length) 
{
   longestString = string1;
   shortestString = string2;
}
else 
{
   longestString = string2;
   shortestString = string1;
}

我知道,這不是一個非常重要的問題,但這是整個方法的2/3,而不是重要的東西。

也許:

int diff = string1.Length.CompareTo(string2.Length);
string longestString  = diff > 0 ? string1 : string2;
string shortestString = diff > 0 ? string2 : string1; 

但是如果你有超過這兩個字符串,並且你想要一個通用的解決方案,你可以使用:

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

由於您的代碼將始終執行if或else路徑,因此選擇一個作為“default”並將其與變量聲明合並:

string longestString = string2
string shortestString = string1;
if (string1.Length > string2.Length) 
{
   longestString = string1;
   shortestString = string2;
}

獎勵指出您實際上將初始化這些變量的事實。

好吧,你可以這樣做來清除你的方法;

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);

並隨時重復使用它!

哎呀,讓它更酷(與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);
}

用法;

string longestString = GetLongestStrings("str1", "str2", /*...*/ "strN").FirstOrDefault();

編輯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();
}

用法;

string longestString = GetLongestString("str1", "str2", /*...*/ "strN");

您可以使用“?:”運算符

string longestString = string1.Length > string2.Length ? string1 : string2;
string shortestString = string1.Length > string2.Length ? string2 : string1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM