如何通过使用Ruby的内置方法和功能对数组进行排序

361 阅读3分钟

Ruby是一种简单而强大的编程语言,为日常编程操作提供了卓越的功能。

因为数组是Ruby和其他编程语言中的一个基本对象,Ruby提供了一种无需编写优秀的自定义算法即可对元素进行排序的方法。

本指南将教你如何通过使用Ruby的内置方法和功能对数组进行排序。

如何对一个数组进行排序

Ruby提供了各种方法对数组进行排序。Ruby中的sort和sort_by方法是对数组进行排序的一些最基本的方法。

例1:使用sort方法

sort方法被定义在Enumerable模块中,它返回被排序的数组的值。

比如说

nums = [1,20, 23, 28, 2, 100, 34, 53, 22, 21, 11]

print nums.sort

[1, 2, 11, 20, 21, 22, 23, 28, 34, 53, 100]

默认情况下,该方法将返回数组中按升序排序的项目。

它使用飞船操作符工作,如果一个值大于,则返回1,等于则返回0,小于则返回1。

如果你提供一个字符串数组,那么排序后的数组将按字母顺序排列,如。

databases = %w{MySQL, PostgreSQL, Redis, Memcached, MongoDB, Elasticsearch}

print databases.sort

["Elasticsearch", "Memcached,", "MongoDB,", "MySQL,", "PostgreSQL,", "Redis,"]

如果你想实现一个自定义的排序顺序,你可以向排序函数传递一个块。例如,下面用排序方法实现了一个相反的顺序。

nums = [1, 2, 11, 20, 21, 22, 23, 28, 34, 53, 100]

print nums.sort {|x, y| y <=> x}

[100, 53, 34, 28, 23, 22, 21, 20, 11, 2, 1]

Ruby也允许你使用sort!方法对一个数组进行就地排序。该方法将影响原来的方法变成新的排序的数组,因为:

nums = [1, 2, 11, 20, 21, 22, 23, 28, 34, 53, 100]

nums.sort!

print nums

[1, 2, 11, 20, 21, 22, 23, 28, 34, 53, 100]

注意:谨慎使用sort! 方法,它将覆盖原始数组,如上面的例子所示。

例2:sort_by方法

与sort方法相比,sort_by方法在排序时提供了灵活性。让我们看几个例子,看看使用sort_by方法进行排序的效果。

第一个例子是按照字符串的长度进行排序。

databases = ["Elasticsearch", "Memcached,", "MongoDB,", "MySQL,", "PostgreSQL,", "Redis"]

print databases.sort_by {|content| content.length}

["Redis", "MySQL,", "MongoDB,", "Memcached,", "PostgreSQL,", "Elasticsearch"]

数组中的元素的排序是根据字符串内容的长度以升序进行的。

我们使用字符串的长度属性,因为sort_by方法希望得到一个数值。

假设我们想用sort_by方法对字符串进行反向排序?在这种情况下,我们可以在长度中添加一个减号运算符,如下图所示。

databases = ["Elasticsearch", "Memcached,", "MongoDB,", "MySQL,", "PostgreSQL,", "Redis"]

print databases.sort_by {|content| -content.length}

上面的例子将以降序返回排序后的数组。

结束

本指南向你展示了如何使用内置的Ruby方法来处理数组并对其进行排序。