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方法来处理数组并对其进行排序。