SWIFT算法包

2020-10-08 09:21:19

我很兴奋地宣布SWIFT算法,这是一个新的序列和收集算法的开源软件包,以及它们的相关类型。

算法是强大的思考工具,因为它们封装了难以阅读且容易出错的原始循环。该算法包包括许多在其他流行编程语言中经常出现的功能强大的通用算法。我们希望这个新的软件包将帮助人们接受算法,提高他们代码的正确性和性能。

使用算法包的初始序列和集合操作集,您可以遍历集合的元素、查找组合和排列、创建随机样本等。

一个Include是一对分块的方法,每个方法将一个集合分解为连续的子序列。一个版本测试相邻元素以找到块之间的断点-您可以使用它将数组快速分隔为升序运行:

让数字=[10,20,30,10,40,40,10,20]让组块=数字。分块(由:{$0<;=$1})//[[10,20,30],[10,40,40],[10,20]]。

另一个版本查找每个连续值的转换中的变化。您可以使用它将名称列表按第一个字符分隔为组:

让Names=[";Cassie&34;,";Chloe";,";Jasmine";,";Jordan";,";泰勒";]让Chunks=Names。Chunked(On:\.。First)//[[";Cassie&34;,";Chloe&34;],[";Jasmine&34;,";Jordan";],[";Taylor";]]。

您可以在随附的指南中阅读有关Chunked或算法包中任何其他组件的更多信息:

我们的雄心是让标准库包含一组丰富、实用的通用算法。我们认为,算法包可以作为一个低摩擦的场所来构建新的相关算法系列,从而帮助实现这一目标-让我们有机会反复探索问题空间,了解不同算法是如何连接和交互的-然后再将它们毕业到标准库中。

SWIFT算法(和SWIFT Numerics)等软件包通过提供以下方式来补充SWIFT演进流程:

算法包在一定程度上是对冗长的SE-0270审查和后续进化过程讨论的回应。对于SE-0270,我们在提供一个小到足以有效利用SWIFT论坛,但又大到足以激励和确保添加的一致性的提案时遇到了压力。展望未来,我们计划试验将相关算法系列分解成多个更小的进化提案,使用算法包的存在来提供额外的上下文。

然而,仅仅因为一个加法可能是包含在算法包中的一个很好的候选者,它就不需要从那里开始它的生命。这不是对SWIFT演进流程的更改。支持良好的球场将一如既往地继续被考虑。

该软件包的直接重点是孵化一组在Sequence and Collection协议家族上推广的实用算法,最终将其包含在SWIFT标准库中-您可能会在Python itertools模块或C++算法库中找到这种功能。

有许多有趣而有用的抽象不符合此标准。例如:

对于添加到算法包中的任何内容,都应该努力收集用例,并检查在其他语言和其他平台上探索该主题的方式。要评估它的适合性,我们应该问:

如上所述,对于满足包标准的修复或新算法,拉请求是受欢迎的!

请随时在SWIFT论坛的相关帖子中询问有关此帖子的问题。