码迷,mamicode.com
首页 > 其他好文 > 详细

(十三)迭代器

时间:2016-01-27 21:30:57      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:

(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
}

技术分享

(十三)迭代器

标签:

原文地址:http://www.cnblogs.com/blueColdFire/p/5164531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!