ruby的Comparable 和Enumerable

Comparable module

include Comparable 一般来说是用于比较的,需要重写 <<=>>方法

如下:

class Person 
 include Comparable 
 attr :age  
 def <=>(aPerson) 
 @age <=> aPerson.age 
 end  


 def initialize(name, gender, age)   
  @name = name   
  @gender = gender 
  @age = age  
 end 
end

aPerson = Person.new("Tom", "male", 18) 

bPerson = Person.new("Mike", "male", 10) 

cPerson = Person.new("Henry", "male", 40)

 puts aPerson > bPerson

 puts aPerson < bPerson 
puts aPerson >= bPerson 
puts aPerson <= bPerson puts aPerson == bPerson 
puts aPerson.between?(bPerson, cPerson)


Enumerable mixin提供了遍历,查找和排序的功能。 要使用Enumerable mixin必须提供each方法,标准做法是在each方法内对每一个元素使用yield操作。如果使用了Enumerable mixin中的max,min,或sort,那么还必须提供<=>方法,用来实现元素之间的比较关系

以下是一个使用Enumerable mixin的例子,IntegerFinder是一个查找字符串中整数的类。 
class IntegerFinder  include Enumerable 
  def initialize(aString)   @string = aString  end   
def each   
@string.scan(/[1-9]\d*/) { |integer| yield integer } 
 end 
end 
  
aDigitFinder = IntegerFinder.new("This is 123, 234, 98 and 10") 
aDigitFinder.collect {|i| print i, " "}

aArray = aDigitFinder.find_all {|i|  i.to_i > 50 } puts "\n", aArray.to_s  
执行结果为: 
123 234 98 10  12323498 
Enumerable mixin中含有许多与集合遍历查找相关的方法,许多标准类也使用了

Enumerable mixin,借助Enumerable mixin中的方法可以方便的实现一些强大的功能,请看以下一些例子: 
#察看数组中的所有单词的长度是否大于4 
%w{ ant bear cat}.all? {|word| word.length >= 4}   #=> false    #返回range中所有不符合条件的元素 
(1..10).reject {|i|  i % 3 == 0 } #=> [1, 2, 4, 5, 7, 8, 10] 
 
#求5到10的和 
#inject方法第一次会把Range中的前两个元素作为参数传递给sum和n, #以后每次会把sum设置为块计算后的返回值。 
(5..10).inject {|sum, n| sum + n }               #=> 45 
 
# 找出数组中最长的单词 
longest = %w{ cat sheep bear }.inject do |memo,word|     
memo.length > word.length ? memo : word 
end 
longest          #=> "sheep"


















 74 
puts aPerson >= bPerson 
puts aPerson <= bPerson puts aPerson == bPerson 
puts aPerson.between?(bPerson, cPerson)

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值