ruby之Enumerable

Enumberable可枚举模块可以理解为对遍历搜索和比较排序集合的抽象。这个模块可以通过mixin为类提供两种能力:

1、可以遍历搜索

enum.all?{|object| block}  判断集合中是否所有元素都满足某条件

puts
[1,2,3,4].all?{|i| i>0} #true

		  puts [1,2,3,4].all?{|i| i>3}		#false

enum.any?{|object| block} 判断是否至少有一个元素满足条件

<span style="white-space:pre">	</span> puts [1,2,3,4].any?{|i| i>3}	#true

enum.collect{|object| block} 每个元素传入block运行的结果以数组形式返回

enum.map为其别名方法

<span style="white-space:pre">	</span>puts [1,2,3,4].collect{|i| i+1 } 	#[2,3,4,5]

enum.each_with_index{|object,index| block}

与each类似,第一个参数为每个元素,第二个为元素对应的坐标

<span style="white-space:pre">		</span>puts [1,2,3,4].each_with_index{|item,index| puts "#{item}-#{index}"}
		#1-0 2-1 3-2 4-3 [1,2,3,4]

注意:执行完后返回集合本身

enum.find(ifnone=nil){|object| block}

找出集合中第一个符合条件的,没有返回ifnone代码块

<span style="white-space:pre">	</span>block=Proc.new(){puts "hello"}
	puts [1,2,3,4].find(block){|item| item>5}
	#hello

enum.find_all{|i| block}  enum.select{|i| block}

返回符合条件的缩影元素

enum.include?(object)集合是否包含

enum.partition{|item| block} 按是否符合条件分割

<span style="white-space:pre">	</span>result=[1,2,3,4].partition(){|item| item>1}
<span style="white-space:pre">	</span>puts result[0]   #{2,3,4}
<span style="white-space:pre">	</span>puts "====="
<span style="white-space:pre">	</span>puts result[1]

enum.inject(initial=nil){|memo,obj| block}  initial 未指定时memo为enum第一个元素  obj从第二个开始迭代

initial指定后,memo初始为指定值,从第一个元素开始迭代。

memo的值会被设置为block运行的结果

2、可比较和排序

enum.Max  enum.Max{|a,b| block}

enum.Min enum.Min{|a,b| block}

enum.sort enum.sort{|a,b| block}

enum.sort_by与enum.sort同,不过更耗费资源。

<span style="white-space:pre">	</span>puts ["a","abc","ab"].sort{|a,b| a.length<=>b.length}
<span style="white-space:pre">	</span>#["a","ab","abc"]
时间: 2024-10-13 18:48:30

ruby之Enumerable的相关文章

ruby学习之Array

ruby中数组的大小是可以随时改变的,数组中的元素只会保存对对象的引用. 一.定义 a=Array.new() a=Array.new(5)   创建5个nil元素的数组 a=Array.new(5,1) 创建5个初始值为1的数组 a=[] a=[1,2,"a"] %w(a b c d ab)用来创建字符串数组,不过无法处理带空格的字符串 同["a","b","c","d","ab"]

ruby学习之Hash

一.定义: hsh=Hash.new hsh=Hash[1=>"a",2=>"b"] hsh={"1"=>"a",2=>"b"} 支持任意对象为key,习惯使用Symbol 二.常用方法 #!/usr/bin/ruby def printResult(args) print args puts "" end hsh={:a=>"hello"

ruby学习之Range

一.概述 Range在ruby中表示区间.表示方法".."和"-".前者表示闭合区间: Range中的元素可以是数字.字符串和自定义的区间对象 (1..10).each{|i| puts i }      #1 2 3 4 5 6 7 8 9 10 (1-10).each{|i| puts i}    #1 2 3 4 5 6 7 8 9 1.1常用方法 Range具有可枚举能力,因此具有Enumerable的所有方法,详细参考上一篇ruby之Enumerable

[原创译书] JS函数编程 3.2 开发和生产环境

?? Functional Programming in Javascript 主目录第三章 建立函数式编程环境 开发和生产环境 环境 编程风格与应用所部署或者将要部署的环境没啥关系.但是库就有关系了. 浏览器 主要的Javascript应用还是跑在客户端的,也就是浏览器.基于浏览器的环境对于开发来说非常好, 因为浏览器无处不在,你可以在本地机器上写代码,解释器是浏览器的Javascript引擎, 所有的浏览器都有开发者终端.火狐的FireBug提供了非常有用的错误信息,并支持断点等等, 不过同

JS函数式编程 3.1 Javascript的函数式库

?? Functional Programming in Javascript 主目录第三章 建立函数式编程环境 Javascript的函数式库 据说所有的函数式程序员都会写自己的函数库,函数式Javascript程序员也不例外. 随着如今开源代码分享平台如GitHab.Bower和NPM的涌现,对这些函数库进行分享.变得及补充变得越来越容易. 现在已经有很多Javascript的函数式变成苦,从小巧的工具集到庞大的模块库都有. 每一个库都宣扬着自己的函数式编程风格.从一本正经的数学风格到灵活松

ruby调试/练习时的小技巧

必备工具 irb 查祖先 1.9.3-p545 :023 > String.ancestors => [String, Comparable, Object, Kernel, BasicObject] String的前面有四个上级 过滤方法 Ruby的方法非常多,以至于不得不用grep了. 1.9.3-p545 :049 > [].methods.grep /^me/ => [:member?, :methods, :method] 查方法来源 1.9.3-p545 :018 &g

【ruby】ruby基础知识

Install Ruby(安装) For windows you can download Ruby from http://rubyforge.org/frs/?group_id=167 for Linux tryhttp://www.rpmfind.net. Our first program(从此开始) Enter the following into the file, "test.rb". ? 1 puts "Howdy!" At the C: promp

ruby hash

使用字面量创建的hash对象,必须包括至少一项,ruby才认为它是hash a = {} 不对 a = {1:"a"} 对 其中{1:a} 这样写 a表示一个变量 Hash.new Hash[] 可以使用中文作为key irb(main):012:0> c = {"致谢":1, a:2} => {:致谢=>1, :a=>2} irb(main):013:0> c[:致谢] => 1 irb(main):064:0> c.fi

ruby面向对象class

ruby对象是严格封装的:只能通过定义的方法访问其内部状态.方法使用的成员变量在对象外部不能直接访问,不过可以通过getter.setter等访问器方法(accessor),使他们看起来好像是直接访问的. 与对象状态的封装性相反,ruby中的类非常开放.每个ruby程序都可以为现有类添加方法,而且也可以为单个对象添加“单键方法(singleton method)”. 创建类 Classes are created in Ruby with the class keyword:class Poin