ruby Enumerator::lazy
当一个很大的数组或集合需要做循环操作的时候,一次性把数据放到内存会有很大弊端。这时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的更多相关文章
- Ruby Enumerator的各种迭代
Enumerator迭代 Mix-in Enumerator获得的迭代方法: each_cons: each_slice: each_with_index: with_index: each_with ...
- Ruby系列文章
安装Ruby.多版本Ruby共存.Ruby安装慢问题 Ruby语言的一些杂项 Ruby中的常量:引号.%符号和heredoc Ruby中的数值 Ruby字符串(1):String基本用法 Ruby字符 ...
- ruby迭代器iterator和枚举器Enumerator
编写自定义的迭代器 The defining feature of an iterator method is that it invokes a block of code associatedwi ...
- Enumerator yielder.yield 与 Proc.yield 区别
最近看ruby cookbook遇到这个用法,google一下,这里原文解释 http://stackoverflow.com/questions/18865860/enumerator-yielde ...
- ruby中迭代器枚举器的理解
参考<ruby编程语言>5.3迭代器和可枚举对象 迭代器一个迭代器是一个方法,这个方法里面有yield语句,这个方法里的yield语句,与传递给这个方法的块进行数据传输 yield将数据传 ...
- Swift中方法(method)所谓的lazy绑定简介
我们知道在ruby之类的动态语言中对象方法可以先从类中预先抽取,然后再应用到某个具体对象上.这称为无绑定的method对象,也可以叫做lazy绑定. 下面举个例子: irb(main):004:0&g ...
- Ruby数组(1):基本用法
数组 Ruby中的数组是一个容器,数组中的每个元素都是一个对象的引用. 注意,Array类中包含了Enumerable模块,所以Enumerable中的方法也都能使用,例如Enumerable中的re ...
- Ruby数组方法整理
数组方法整理 方法列表: all().any().none()和one():测试数组中的所有或部分元素是否满足给定条件.条件可以是语句块中决定,也可以是参数决定 append():等价于push() ...
- Ruby 对多语言的支持
这是一篇翻译文章,原文链接 http://blog.grayproductions.net/articles/understanding_m17n.原文是一个系列,翻译过来整合成了一篇文章,对文章内容 ...
随机推荐
- 手机服务器微架构设计与实现 之 http server
手机服务器微架构设计与实现 之 http server ·应用 ·传输协议和应用层协议概念 TCP UDP TCP和UDP选择 三次握手(客户端与服务器端建立连接)/四次挥手(断开连接)过程图 · ...
- JVM 字节码(一)字节码规范
JVM 字节码(一)字节码规范 JVM 学习资源 Java ClassFile 字节码规范(Oracle) Java 虚拟机规范(Java SE 7 中文版) (周志明等译) Java 反编译工具 - ...
- Spring 框架下 (增 删 改 )基本操作
//applicationContext.xml 配置文件 <?xml version="1.0" encoding="UTF-8"?><be ...
- MySQL skip-character-set-client-handshake导致的一个字符集问题
http://www.quweiji.com/mysql-skip-character-set-client-handshake%E5%AF%BC%E8%87%B4%E7%9A%84%E4%B8%80 ...
- 《Linux就该这么学》第六天课程
每个人都有梦想,同时也有理想,当一个人的梦想与理想相同时会发生什么? 搜集了一些对新手有用的表格 原创地址:https://www.linuxprobe.com/chapter-05.html use ...
- OpenGL Compute Shader靠谱例子及读取二进制Shader,SPIR-V
学OpenGL以来一直苦恼没有像DX那样可以读取二进制Shader使用的方法,除去有时不想公开自己写的牛逼Shader的心理(虽然目前还从没写过什么牛逼的Shader), 主要是不用现场编译,加快读取 ...
- [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creator【s
问题:执行创建函数的sql文件报错如下: [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA ...
- ScriptOJ-unique#89
一般做法 const unique = (arr) => { const result = arr.reduce((acc, iter) => { if(acc.indexOf(iter) ...
- JQuery对checkbox的操作
对复选框组的全选.全不选.不全选,获取选中的复选框的值的操作 点击全选按钮,复选框组全部选中或者全部取消. 实现全选按钮和复选框组的联动,当复选框组中有一个没有被选中后,那么id=‘checkedAl ...
- RobotFramework+Selenium2软件安装教程
1.安装python 必须是 2.7 版本 设置环境变量:F:\software\Python27;F:\software\Python27\Scripts; 重启电脑: 2.安装wxPy ...