- 浏览: 242534 次
- 性别:
- 来自: ph
文章分类
最新评论
-
zrj_software:
说了等于没说,LZ能否把DLL代码给我研究下啊30729375 ...
如何在Delphi中调用.Net编写的DLL中的函数 -
reyesyang:
正在查找ruby单例模式相关资料,很有帮助,谢谢。
ruby中的单例模式 -
chaochao_pc:
您好,您的通讯工具能传输文件吗? 我在上边好像没找到!!! ...
Silverlight Socket 实现收发信息 -
huaxia524151:
谢谢,解决问题。return self.name.encode ...
Django笔记5(管理站点) -
yahon:
在flash中如何获取呢?
Flash+html--网页向FLASH传递参数
可枚举模块。 Enumerable mixin 是含有几组遍历与查寻方法的集合类,而且它还有排序的能力。
如果你希望自己的类也具有集合类这么多优秀的特点,那么这个类必须提供一个 each 方法,在这个方法内,它产生连续的集合成员。即依次返回你自己集合类的元素。然后再在你的类中混合插入 Enumerable 模块,你的类就可支持 map 、 include? 、 find_all? 等方法了。若你集合内的元素再支持 <=> 方法,即集合内的元素混合插入了 Comparable 模块,那么这个集合也可以得到 min 、 max 、 sort 等方法。
实例方法:
(1) enum.all? [{|obj| block } ] => true or false enum.any? [{|obj| block } ] => true or false 将集合内的每个元素传递给块。即依次为集合内的各个元素来执行块的内容。当所有元素为真时, all 返回 true 。当所有元素为假时, any 返回 false 。如果忽略了 block 块,则 Ruby 会偷偷地添加一个 {|obj|obj} 块。
例如:
%w{ ant bear cat}.all? {|word| word.length >= 3} #=> true
%w{ ant bear cat}.all? {|word| word.length >= 4} #=> false
[ nil, true, 99 ].all? #=> false
%w{ ant bear cat}.any? {|word| word.length >= 3} #=> true
%w{ ant bear cat}.any? {|word| word.length >= 4} #=> true
[ nil, true, 99 ].any? #=> true
(2) enum.collect {| obj | block } => array enum.map {| obj | block } => array 依次为 enum 内的每个元素执行块 block 的内容,并将结果存入一个新数组中,最后返回该数组。
例如:
(1..4).collect {|i| i*i } #=> [1, 4, 9, 16]
(1..4).collect { "cat" } #=> ["cat", "cat", "cat", "cat"]
省略块时,会执行 obj.collect {|item| item} 这等同于 Enumerable#to_a 。
注: collect 有收集,采集的含义。
(3) enum.each_with_index {|obj, i| block } → enum 对于 enum 内的每个条目,使用元素及其索引进行循环操作的迭代器,即使用两个参数调用块。并返回 self 。
例如:
hash = Hash.new
%w(cat dog wombat).each_with_index {|item, index|
hash[item] = index }
hash #=> {"cat"=>0, "wombat"=>2, "dog"=>1}
(4) enum.detect(ifnone = nil) {| obj | block } => obj or nil enum.find(ifnone = nil) {| obj | block } => obj or nil 传递 enum 内的每个元素给块 block 进行计算,返回计算值首次为真的那个元素。若块的计算始终都不为真的话,则计算 ifnone 部分 ( 如果有的话 ) 并返回它的值,或者返回 nul 。
例如:
(1..10).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> nil
(1..100).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> 35
注: detect 和 find 单词都有查明真相的意思,用在这个方法上,是因为它要查出每个元素经过计算后的真相,即是否为真。
(5) enum.find_all {| obj | block } => array enum.select {| obj | block } => array 在使用元素进行块计算时,若计算值为真,则把该元素存入数组,最后返回该数组。若块的计算始终都不为真时,则返回空数组。
例如:
(1..10).find_all {|i| i % 3 == 0 } #=> [3, 6, 9]
注: select 有挑选的意思。把计算后为真的元素挑选出来。
(6) enum.grep(pattern) => array enum.grep(pattern) {| item | block } => array 若 pattern === item ,则把该元素存入数组,最后返回该数组,若带块调用时,则会依次为所有满足上述条件的元素来执行块的内容,并把计算结果存入到数组,最后返回该数组。若没有符合条件的元素时,返回空数组。
例如:
(1..100).grep 38..44 #=> [38, 39, 40, 41, 42, 43, 44]
c = IO.constants
c.grep(/SEEK/) #=> ["SEEK_END", "SEEK_SET", "SEEK_CUR"]
res = c.grep(/SEEK/) {|v| IO.const_get(v) }
res #=> [2, 0, 1]
注: grep 这个单词在 UNIX 中是一个工具程序。可用做文件内的字符串查找。
(7) enum.inject(initial) {| memo, obj | block } => obj enum.inject {| memo, obj | block } => obj 在每一步骤中, memo 要被设置为由块计算后返回的值。首先,用 initial 初始化 memo 的值,并将 memo 与 obj 参数传递给块进行计算。然后将上步块计算后的值赋值给 memo 后,再继续计算块,以此类推。
其中, enum 集合中的每个元素依次赋值给 obj 。而 memo 的初始是 initial ,尔后则是由 block 块计算出来的值。这样一直循环到 enum 的最后元素,并将最后的块的计算结果返回。
若省略了初始值 initial 的话,开始时会把第 1 和第 2 个元素传递给块。 此时,若只有 1 个元素时,将直接返回首元素,而不会执行块。 若没有元素,则返回 nil 。
例如:求和的计算
p [1,2,3,4,5].inject(0) {|result, item| result + item } #=> 15
这等同于
result = 0
[1,2,3,4,5].each {|v| result += v }
p result #=> 15
再如:
# 查找最长的单词
longest = %w{ cat sheep bear }.inject do |memo,word|
memo.length > word.length ? memo : word
end
longest #=> "sheep"
# 查找最长单词的长度。
longest = %w{ cat sheep bear }.inject(0) do |memo,word|
memo >= word.length ? memo : word.length
end
longest #=> 5
注:这个方法之所以用 inject 这个单词,是因为这个方法有个注射动作,即将 initial 及后来的块计算结果注入到 memo 中。
(8) enum.include?(obj) => true or false enum.member?(obj) => true or false 若 obj== 某元素时,返回真。
(9) enum.max => obj enum.max {|a,b| block } => obj
enum.min => obj enum.min {| a,b | block } => obj 返回最大与最小的元素。不带块的第一种形式是假设 enum 的所有元素都实现了 Comparable 模块。第二种形式块使用 <=> 来判断 enum 内各个元素的大小。通常要求该块返回下列各整数值:当 a>b 时返回正整数, a==b 时返回 0 ,而 a<b 时返回负整数。若该块返回了一个非整数值时,会引发 TypeError 异常。
例如:
a = %w(albatross dog horse)
a.min #=> "albatross"
a.min {|a,b| a.length <=> b.length } #=> "dog"
a.max #=> "horse"
a.max {|a,b| a.length <=> b.length } #=> "albatross"
(10) enum.partition {| obj | block } => [ true_array, false_array ] 若对某元素执行块的结果为真,则把该元素归入第一个数组;若为假则将其归入第二个数组 , 最后生成并返回一个包含这两个数组的新数组。
例如:
(1..6).partition {|i| (i&1).zero?} #=> [[2, 4, 6], [1, 3, 5]]
注:硬盘的分区就使用这个单词。只是没有想到我们要操作的一些对象,也可以被“分区”的。
(11) enum.reject {| obj | block } => array 对 enum 内的各元素依次传入块中进行计算,若计算值为假则将该元素存入数组,最后返回该数组。
例如:
(1..10).reject {|i| i % 3 == 0 } #=> [1, 2, 4, 5, 7, 8, 10]
注: reject 有不合格者,不合格品的意思。
(12) enum.sort => array enum.sort {| a, b | block } => array 对所有元素进行升序排列后返回这个新的数组。若不带块时,将以 <=> 方法的比较结果为基础进行排序。如果想借用 <=> 之外的方法进行排序时,可以指定一个块。此时将以块的计算结果为基础进行排序。通常要求该块返回下列各值:当 a>b 时返回正整数, a==b 时返回 0 ,而 a<b 时返回负整数。若该块返回了一个非整数值时,会引发 TypeError 异常。
Enumerable#sort 所进行的是不稳定的排序 (unstable sort) 。
注:排序后,若相等的元素的位置并未改变的话,这种排序就是 " 稳定的排序 (stable sort)" 。
例如:
%w(rhea kea flea).sort #=> ["flea", "kea", "rhea"]
(1..10).sort {|a,b| b <=> a} #=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
发表评论
-
ruby 连接操作 sql2005
2010-05-24 09:38 1085The following is improved versi ... -
使用Ruby DBI模块
2009-08-18 12:29 1512使用Ruby DBI模块 ... -
Symbol对象
2009-08-07 10:19 767Symbol 对象用于表现 Ruby 解释器内的名字或 ... -
ruby中的单例模式
2009-08-05 16:00 1582Singleton 模块实现了单态模式 (Singleto ... -
ruby中的观察者模式
2009-08-05 15:56 958require 'observer' class TV ... -
区别Ruby的require,load,和include
2009-08-05 15:49 934三者之间区别并不像你想的那么难,也不会像有些文章写的那么长。挺 ... -
Object and Reflection
2009-08-05 15:34 718摘自: http://anw.stikipad.com/oc ... -
Blocks, Closures and Proc Objects
2009-08-05 15:18 751Ruby 的 block 是個不錯的設計. 一個 block ... -
Comparable模块
2009-08-05 12:20 1020Comparable mixin 由希望对它的对象进行排序的 ... -
Proc过程对象
2009-08-05 12:04 873就是所谓的过程对象。 Proc 对象是将一组局部变量绑定到 ... -
Method对象
2009-08-05 11:36 953Method 对象是由 Object#method(: ... -
Struct对象
2009-08-04 17:50 936结构体类 Struct 是将许多属性 (atribute ... -
Range对象
2009-08-04 16:29 928Range 对象表现为一个间隔,有开始与结束的值集。 Ra ... -
Ruby学习笔记
2009-08-04 16:27 12501、$variable 代表全局变量, @variable ... -
ruby惯用法
2009-08-04 15:27 841Ruby有不少惯用法,这里略作一些介绍,也方便阅读他人代码: ... -
Ruby哈希表
2009-08-04 14:51 2124哈希表的建立: ... -
Ruby中的数组过滤
2009-08-04 12:19 1073数组可以算是计算机编程中用到的最多的一个数据结构了,ruby中 ... -
Ruby数组操作总结
2009-08-04 11:50 3578数组的创建 arr = Array.new num #创 ...
相关推荐
在Prototype框架中,很多对象如Array、Hash、ObjectRange以及与DOM和AJAX相关的对象都混合了Enumerable模块,使得这些对象能够利用Enumerable的方法。 Enumerable模块的设计理念类似于某些面向对象语言中的抽象基类...
在JavaScript的Prototype库中,Enumerable模块提供了一系列用于处理集合(如数组)的方法,极大地扩展了JavaScript的迭代功能。本文将重点解析Enumerable中的`$break`和`$continue`概念,以及`grep`方法的设计思想。...
欢迎来到拉马农场! 要使其运行: 将此存储库克隆到您的计算机。 运行bundle install 运行rspec llama_farm_spec.rb 里面有什么? data.rb:看一下数据......llama.rb:这是骆马...... llama_farm.rb:骆驼的集合,...
在Ruby编程语言中,Enumerable模块和Enumerator类是两个非常核心且强大的工具,它们为处理集合数据提供了丰富的功能。本文将深入探讨这两个概念的实现、用途以及如何在实际编程中运用它们。 首先,Enumerable模块是...
2. **Enumerable模块**:Ruby的Enumerable模块提供了一组方便的数据处理方法,如`each`, `map`, `select`, `inject`等,可以遍历并操作数组、哈希等可枚举对象。 3. **String类**:Ruby的字符串处理非常强大,...
这个库很大程度上受到 Ruby 的 Enumerable 模块的启发,并借用了它的大量功能。 注意:这并不意味着是一个独立的库,而是要与具有.each方法的另一种数据类型结合使用。安装作为 NPM 模块npm install enumerable-js ...
该项目展示了Ruby Enumerable模块中方法的重建列表。 重写的Enumerable方法是: 每个-> my_each each_with_index-> my_each_with_index 选择-> my_select 全部? -> my_all? 任何? -> my_any? 没有...
9. **Enumerable模块**:Ruby的Enumerable模块提供了一整套函数式编程工具,如`each`, `all?`, `any?`, `none?`, `find`, `count`等,这些都是在处理集合时非常有用的函数。 10. **Proc和Lambda**:两者都是Ruby中...
Enumerable模块是Ruby中非常重要的一个部分,它提供了一套强大的集合操作方法,如map、select、reduce等,使得处理数组、范围等各种可枚举对象变得极其便利。然而,在处理更复杂的键值对数据结构,如map[string]...
例如,Enumerable模块提供了诸如`each`, `map`, `select`, `reject`等迭代方法,Element模块则扩展了JavaScript的DOM元素,增加了如`addClassName`, `removeClassName`等便捷操作,而String模块则增强了字符串对象,...
Enumerable模块包含了大量处理集合的便利方法,如`each`, `map`, `select`等。 异常处理在Ruby中使用`begin..rescue..end`结构,允许程序在出现错误时进行恢复。Ruby还支持自定义异常类,方便扩展。 Ruby on Rails...
此外,Enumerable模块是一组用于遍历和操作集合的强大工具,它包含的`inject`和`reduce`方法可以执行聚合操作,`group_by`则可以按条件对元素分组。 Ruby的模块(Module)和类(Class)系统使得代码组织和复用变得...
9. blocks和迭代器:Ruby的Enumerable模块提供了许多内置的迭代器,如each、map等,结合blocks可以方便地进行数据处理。 在"Ruby学习资料chm"中,可能涵盖以下内容: 1. Ruby基础语法:包括变量、常量、运算符、...
- Enumerable模块:提供迭代功能。 - Singleton模块:确保一个类只有一个实例。 - **Require, load和include**:如何加载其他文件或模块。 #### 九、异常 - **异常处理**:try...rescue...else...ensure结构的...
除了上述功能,Prototype还包含了一些实用工具,如Enumerable模块中的各种集合操作方法,Object.extend()用于对象合并,以及Hash类用于键值对存储等。 综上所述,Prototype 1.6.0.3版本通过“prototypejs.js”文件...
描述性统计概述此gem向Enumerable模块添加了一些方法,从而可以轻松计算包含Enumerable的集合(例如Array,Hash,Set和Range)中数字样本数据的基本描述统计量。 可以计算的统计信息是: 数字和意思是中位数模式方差...
在Ruby编程语言中,Enumerable模块是一组非常强大的工具,它为集合对象提供了各种迭代方法,使得我们可以方便地处理数组、哈希等数据结构。本文将深入探讨如何实现Ruby的可枚举方法,以及这些方法在实际编程中的应用...
- **Enumerable的扩展**:解释Enumerable模块的扩展方法。 - **Array的扩展**:列举Array类被扩展后的新方法。 - **Hash的扩展**:展示Hash类的扩展方法。 - **Regexp的扩展**:说明Regexp类的扩展方法。 - **Range...
在Crystal编程语言中,`flatten_as.cr`是一个扩展了Enumerable模块的功能,增加了`#flatten_as`方法。这个方法与已有的`#flatten`方法类似,用于将嵌套的集合(如数组或范围)扁平化为单一层次的结构。但`#flatten_...
项目1:气泡排序排序算法是《计算机科学》中最常用的最早的...项目2:可数方法您了解了将Enumerable模块混入Array和Hash类(以及其他类)并为您提供了许多方便的迭代器方法。 为了证明它没有魔力,您将重建那些方法。