码迷,mamicode.com
首页 > 编程语言 > 详细

ruby Enumerator::lazy

时间:2017-09-07 16:09:12      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:line   .com   数值   方法   enum   数据   div   卡死   nbsp   



当一个很大的数组或集合需要做循环操作的时候,一次性把数据放到内存会有很大弊端。这时lazy就派上用场了。
Float::INFINITY 是无穷大意思
举个例子 取出1到无穷大对7整除余数为0的前10个数值。
(1..Float::INFINITY).select { |x| x % 7 == 0 }.take(10).to_a

  这样写的话会直接卡死,这个时候用lazy

(1..Float::INFINITY).lazy.select { |x| x % 7 == 0 }.take(10).to_a

 

同样,当我们操作一个很大的文件时,直接做each_line操作会把整个文件都放到内存里。

file = File.open(xxxx, r)
file.each_line.select { |row| row.xxx }

用lazy方法会逐步加载文件。

file = File.open(xxxx, r)
file.each_line.lazy.select { |row| row }

  

关于Enumerator::lazy 详细用法:

https://railsware.com/blog/2012/03/13/ruby-2-0-enumerablelazy/

 




ruby Enumerator::lazy

标签:line   .com   数值   方法   enum   数据   div   卡死   nbsp   

原文地址:http://www.cnblogs.com/wangyuyu/p/7490130.html

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