(1)迭代器times,each,sort
迭代器就是特殊的循环,能更方便的遍历、排序或其他操作
4.times{
print "hello "
}
4.times{|n|
print n
}
puts "----"
a=[7,8,9]
a.each{
|n|
puts n
}
puts "----"
hashes={"a"=>"one","b"=>222}
hashes.each{
|key,value|
puts "#{key}:#{value}"
}
如下是sort迭代器用于排序
a=[1,2,3,4]
a.sort{|a,b|
b<=>a #表示取出a在前b在后,放回去时b在前a在后,实现反序排列
}
puts a
puts "-------"
a=a.sort{ |a,b|
b<=>a
}
puts a
#sort迭代器也要接收覆盖原来的才能看到改变
(2)自定义迭代器
其实迭代器就是函数而已,我们调用迭代器就跟调用函数的方式一样,我们自己也可以写迭代器:
attr_accessor :title,:author
attr_accessor与它后面的第一个冒号要用空格隔开
class Book
attr_accessor :title,:author
def initialize(title,author)
@author=author
@title=title
end
end
class BookList
def initialize()
@book_list=Array.new
end
def add(book)
@book_list.push(book)
end
def length
@book_list.length
end
#可以用方括号去获取当前是哪一本书
def [](n)
@book_list[n]
end
#可以用方括号修改对应下标书籍
def []=(n,book)
@book_list[n]=book
end
#删除一本书
def delete(book)
@book_list.delete(book)
end
#自定义一个迭代器,循环输出书的标题
def each_title
@book_list.each{
|book|
yield(book.title) #yield有专门章节讲解,还是比较重要的一个关键字
}
end
end
temp=BookList.new
a=Book.new("001","第一本")
b=Book.new("002","第二本")
temp.add(a)
temp.add(b)
# title对应book.title
temp.each_title{|title|
puts title
}