我的代码中有以下几行。他们占据了比他们应该更多的地方。对较小代码的任何建议。
string longestString;
string shortestString;
if (string1.Length > string2.Length)
{
longestString = string1;
shortestString = string2;
}
else
{
longestString = string2;
shortestString = string1;
}
我知道,这不是一个非常重要的问题,但这是整个方法的2/3,而不是重要的东西。
答案 0 :(得分:17)
也许:
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();
答案 1 :(得分:11)
由于您的代码始终执行if或else路径,因此选择一个作为“default”并将其与变量声明合并:
string longestString = string2
string shortestString = string1;
if (string1.Length > string2.Length)
{
longestString = string1;
shortestString = string2;
}
您实际上初始化这些变量这一事实的好处。
答案 2 :(得分: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);
随时重复使用它!
哎呀,让它更酷(与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();
EDIT1:我的第一次实施并不是最有效的。正如蒂姆建议的那样;
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");
答案 3 :(得分:1)
您可以使用“?:”运算符
string longestString = string1.Length > string2.Length ? string1 : string2;
string shortestString = string1.Length > string2.Length ? string2 : string1;