首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写更简洁的算法?

如何编写更简洁的算法?
EN

Stack Overflow用户
提问于 2017-11-28 06:53:23
回答 2查看 129关注 0票数 0

我是在一个名为CodeFights的网站上编写代码的初学者,我注意到,许多评级较高的程序员会比我有更简洁的答案。

以这个问题为例:

给定一个句子,检查它是否是潘格拉姆。 示例: 对于“飞快的棕色狐狸跳过懒狗”,输出应该是isPangram(句子)= true; 对于句子= "abcdefghijklmnopqrstuvwxya",输出应该是isPangram(语句)= false。 输入/输出

  • 时限3000 cs (cs)
  • 输入字符串句

包含ASCII码在32,126范围内的字符的字符串.

有保证的限制:

1 sentence.length≤100.

  • 输出布尔 如果句子是错的,则为真。

C#语法提示

//将帮助消息打印到控制台//返回字符串helloWorld(字符串名称){Console.Write(“在运行测试时打印到控制台”);返回"Hello,“+ name;}

我的代码是:

代码语言:javascript
复制
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的代码在我自己,但谁花时间来解释它自己也会非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-28 07:26:43

简洁的代码并不总是值得追求的东西。实际上,你提供的样本,高评价的一个,不是我所说的简洁。我会说它简洁,甚至可能会说它不正确。

由于学究,提供的样本的一个更正确的版本是:

bool isPangram(string s) => s.ToUpper().Distinct().Count(_ => _ >= 'A' && _ <= 'Z') == 26;

至于样本的作用,有几个步骤:

  1. .ToUpper()将输入字符串转换为大写。
  2. .Distinct()将字符串转换为一个离散的字符列表(出现在字符串中的每个字符值将出现在列表中一次)。
  3. .Count(_ => _ > 64 && _ < 91)返回列表中大于64 (字母A的ASCII代码为65)和小于91 (字母Z的ASCII代码为90)的元素数。
  4. 如果最终列表中有26个元素(在(英语)字母表中有26个字母),/ 26将返回1,如果小于26个,则返回0。
  5. 01值将分别自动转换为布尔值、false值和true值。

至于如何更简洁地编写代码,它将随着时间和实践的推移而来。了解目标阻力最小的道路是第一步,然后了解所选语言的所有细节将帮助您找到最简单的方法来实现最简单的解决方案。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2017-12-04 03:53:06

“Slomo的代码如何在不使用return关键字的情况下返回值?”

它使用C#。它声明了一个表达式体函数。下面是关于那个C# 6.0获得更简洁的…的一篇旧文章

并且,从规格说明获得的方法:

表达式体由=>、表达式和分号组成,表示调用方法时要执行的单个表达式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47525581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档