标签:
杂谈 |
Original URL: http://blog.earlzhang.com/html/y2009/1535.html
之前提到过,最近在学Ruby编程语言。
作为新一代的动态语言,Ruby内置了很多强大的内置功能。比如在数组方面,缺省就有排序功能,免去了自己编制排序命令的麻烦。
在缺省情况下,对数组执行.sort就可以返还以递增顺序排序的新数组。但问题在于,若这是一个多维数组,比如二维的,直接执行.sort只会针对第一维排序,若要按照第二维来排序便无法直接操作了。后来查看语法说明,发现利用.sort附带的block功能便可轻松完成相关任务。
在.sort的block中,可以有两个参数,两者之间通过<=>进行比较,所以我们只需要在block中直接指定以两个参数的第二维来比较便可以了。见下面附录程序的第一块。
利用block,我们可以大大的扩充.sort的功能,比如虽然.sort之后再.reverse可以实现递减排序,但更好直接的方法是交换<=>前后的顺序,便可以完成。请注意下面附录程序的第二段。
当然,其实我们不仅可以针对数组中的元素本身排序,还可以针对任何由此衍生出的属性进行排序,比如下面就是比较每个元素的长度,并按照字符长度递增排序。只要愿意,修改就可以实现更多不同种类的排序——比如按照元素中含有某个字母的数量排序等等。
require 'pp'
puts “指定以第二维数组排序”
a=[[1,3],[8,100],[5,36]]
pp a
puts “=”*20
a=a.sort {|x,y| x[1] <=> y[1]}
pp a
puts “直接实现逆序排序”
a=[1,3,5,7,9]
pp a
puts “=”*20
a=a.sort {|x,y| y<=>x }
pp a
puts “以数组元素长度排序”
a=["aaa","bbbb","cc"]
pp a
puts “=”*20
a=a.sort {|x,y| x.length <=> y.length}
pp a
以下是程序执行结果:
指定以第二维数组排序
[[1, 3], [8, 100], [5, 36]]
====================
[[1, 3], [5, 36], [8, 100]]
直接实现逆序排序
[1, 3, 5, 7, 9]
====================
[9, 7, 5, 3, 1]
以数组元素长度排序
["aaa", "bbbb", "cc"]
====================
["cc", "aaa", "bbbb"]
Ruby的确是一种能够快速上手并且快速实现一些以前用Basic很复杂才能实现的功能,所以近期还把Ruby当作Linux的Shell语言来使用,这方面的体会改天在与诸位分享。
前一篇:开始学Ruby语言