我是在一个名为CodeFights的网站上编写代码的初学者,我注意到,许多评级较高的程序员会比我有更简洁的答案。
以这个问题为例:
给定一个句子,检查它是否是潘格拉姆。 示例: 对于“飞快的棕色狐狸跳过懒狗”,输出应该是isPangram(句子)= true; 对于句子= "abcdefghijklmnopqrstuvwxya",输出应该是isPangram(语句)= false。 输入/输出
包含ASCII码在32,126范围内的字符的字符串.
有保证的限制:
1 sentence.length≤100.
C#语法提示
//将帮助消息打印到控制台//返回字符串helloWorld(字符串名称){Console.Write(“在运行测试时打印到控制台”);返回"Hello,“+ name;}
我的代码是:
bool isPangramMine(string sentence)
{
char[] stringToCharArray = sentence.ToLower().Distinct().ToArray();
Array.Sort(stringToCharArray);
string joinedkArrayToCheck = String.Join("", stringToCharArray);
MatchCollection matches = Regex.Matches(joinedkArrayToCheck, "[a-z]");
string[] stringMatchArray = new string[matches.Count];
for (int i = 0; i < matches.Count; i++)
stringMatchArray [i] = matches[i].Groups[0].Value;
string joinedArrayToString = String.Join("", stringMatchArray );
Console.WriteLine(joinedArrayToString );
if (joinedArrayToString .Length == 26)
return true;
else
return false;
} 评分最高的C#答案是由一个名叫Slomo的人写的。答案是:
int isPangram(string s) => s.ToUpper().Distinct().Count(_ => _> 64 && 91;91) / 26;
Slomo的代码如何在不使用return关键字的情况下返回值?
我看到了类似于这个这里和这里的答案,但是他们只有简洁的代码,而没有解释它是如何工作的。
我正在寻找一个答案,告诉我一个资源,我可以使用分解Slomo的代码在我自己,但谁花时间来解释它自己也会非常感谢。
发布于 2017-11-28 07:26:43
简洁的代码并不总是值得追求的东西。实际上,你提供的样本,高评价的一个,不是我所说的简洁。我会说它简洁,甚至可能会说它不正确。
由于学究,提供的样本的一个更正确的版本是:
bool isPangram(string s) => s.ToUpper().Distinct().Count(_ => _ >= 'A' && _ <= 'Z') == 26;
至于样本的作用,有几个步骤:
.ToUpper()将输入字符串转换为大写。.Distinct()将字符串转换为一个离散的字符列表(出现在字符串中的每个字符值将出现在列表中一次)。.Count(_ => _ > 64 && _ < 91)返回列表中大于64 (字母A的ASCII代码为65)和小于91 (字母Z的ASCII代码为90)的元素数。/ 26将返回1,如果小于26个,则返回0。0和1值将分别自动转换为布尔值、false值和true值。至于如何更简洁地编写代码,它将随着时间和实践的推移而来。了解目标阻力最小的道路是第一步,然后了解所选语言的所有细节将帮助您找到最简单的方法来实现最简单的解决方案。
希望这能有所帮助。
发布于 2017-12-04 03:53:06
“Slomo的代码如何在不使用return关键字的情况下返回值?”
它使用C#。它声明了一个表达式体函数。下面是关于那个C# 6.0获得更简洁的…的一篇旧文章
并且,从规格说明获得的方法:
表达式体由=>、表达式和分号组成,表示调用方法时要执行的单个表达式。
https://stackoverflow.com/questions/47525581
复制相似问题