- 浏览: 237259 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhangzijun1984:
谢谢! 写的很详细
ruby 的数组操作 -
jcdby:
非常棒的文章。我从头看到了尾。但是为什么最后的关键部分不完整呢 ...
javascript 函数对象 -
56553655:
giianhui 写道希望能介绍一下这个类的使用场景,谢谢!看 ...
sun.misc.Unsafe 的使用 -
liuInsect:
为什么 这样就可以访问了呢? 是改变了什么设置吗??? sec ...
sun.misc.Unsafe 的使用 -
softor:
set什么啊?
MySQL 的 source 命令处理中文问题
ruby语言的内置数据结构强大到让我震惊。下面展示了ruby数组的部分魔力
1. &
[ 1, 1, 3, 5 ] & [ 1, 2, 3 ] # => [1, 3]
取两个数组中都有的元素,但只取一个,不重复取。
2. *
[ 1, 2, 3 ] * 3 # => [1, 2, 3, 1, 2, 3, 1, 2, 3]
如果*号后面跟的是数字n,将原先数组中的所有元素重复n次,串联起来。相当于普通数字的乘法操作。
[ 1, 2, 3 ] * "--" # => "1--2--3"
如果*号后面跟的是字符串,也将返回字符串。
3. +
[ 1, 2, 3 ] + [1, 4, 5 ] # => [1, 2, 3, 1, 4, 5]
简单的将两个数组连接在一起,不删除重复元素。
4. -
[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]
# => [3, 3, 5]
从第一个数组中删除所有出现在第二给数组中的元素。
5. <<
[ 1, 2 ] << "c" << "d" << [ 3, 4 ] << [3, 4]
# => [1, 2, "c", "d", [3, 4], [3, 4]]
在数组末尾添加新元素,也不管重复不重复。
6. ==
[ "a", "c" ] == [ "a", "c", 7 ] # => false
[ "a", "c", 7 ] == [ "a", "c", 7 ] # => true
[ "a", "c", 7 ] == [ "a", "d", "f" ] # => false
判断两个数组是否相等——数组相等的前提是,数组所有元素相等,数组大小也当然相等。
7. |
[ "a", "b", "c" ] | [ "c", "d", "a" ]
# => ["a", "b", "c", "d"]
取两个数组中所有元素组成的集合,删除重复元素。
8. at
a = [ "a", "b", "c", "d", "e" ]
a.at(0) # => "a"
a.at(-1) # => "e"
a.at(5) # => nil
取回某个索引中的元素,倒数第一个索引是-1,第二个是-2。
9. clear
a = [ "a", "b", "c", "d", "e" ]
a.clear # => []
删除数组中的所有元素
10. collect!
a = [ "a", "b", "c", "d" ]
a.collect! {|x| x + "$" } # => ["a$", "b$", "c$", "d$"]
a # => ["a$", "b$", "c$", "d$"]
对数组中的每一个元素进行遍历,block中对元素的操作将改变元素的值。
11. compact
[ "a", nil, "b", nil, "c", nil ].compact # => ["a", "b", "c"]
删除数组中所有值为nil的元素,也即压缩数组。
12. concat
[ "a", "b" ].concat( ["c", "d"] ) # => ["a", "b", "c", "d"]
将第二个数组中的元素添加在第一个数组末尾,组成新数组。
13. count
[1, 2, 3, 4].count(3) # => 1
[1, 2, 3,3, 4].count(3) # => 2
[1, 2, 3, 4].count {|obj| obj > 2 } # => 2
计算数组中等于某个值的元素有几个。
14. delete
a = [ "a", "b", "b", "b", "c" ]
a.delete("b") # => "b"
a # => ["a", "c"]
a.delete("z") # => nil
a.delete("z") { "not found" } # => "not found"
删除数组中值为某个给定值的元素。
15. each
a = [ "a", "b", "c" ]
a.each {|x| print x, " -- " }
result :
a -- b -- c --
遍历数组,打印元素值。
16. each_index
a = [ "a", "b", "c" ]
a.each_index {|x| print x, " -- " }
result :
0 -- 1 -- 2 --
遍历数组,打印索引。
17. empty?
[].empty? # => true
[ 1, 2, 3 ].empty? # => false
判断数组是否为空。
18. join
[ "a", "b", "c" ].join # => "abc"
[ "a", "b", "c" ].join("-") # => "a-b-c"
将数组中的元素连接成字符串。如果给定参数,则在每个元素直接加入该参数。
19. last
[ "w", "x", "y", "z" ].last # => "z"
[ "w", "x", "y", "z" ].last(1) # => ["z"]
[ "w", "x", "y", "z" ].last(3) # => ["x", "y", "z"]
如果不给定参数,取最后一个元素。如果给定参数n,取最后n个参数组成数组。
20. length
[ 1, nil, 3, nil, 5 ].length # => 5
长度。空元素nil也算元素,计算在长度范围内。
21. pop
a = %w{ f r a b j o u s }
a.pop # => "s"
a # => ["f", "r", "a", "b", "j", "o", "u"]
a.pop(3) # => ["j", "o", "u"]
a # => ["f", "r", "a", "b"]
返回删除了最后n个元素后的数组。
22. push
a = [ "a", "b", "c" ]
a.push("d", "e", "f") # => ["a", "b", "c", "d", "e", "f"]
在数组末尾插入元素。
23. replace
a = [ "a", "b", "c", "d", "e" ]
a.replace([ "x", "y", "z" ]) # => ["x", "y", "z"]
a # => ["x", "y", "z"]
用新数组替换旧数组。
24. reverse
[ "a", "b", "c" ].reverse # => ["c", "b", "a"]
[ 1 ].reverse # => [1]
反转数组。
25. shift
args = [ "-m", "-q", "-v", "filename" ]
args.shift # => "-m"
args.shift(2) # => ["-q", "-v"]
args # => ["filename"]
从数组头部删除n个元素,并将他们返回。若删除的是一个,则返回字符串。若删除两个以上元素,则返回这n个组成的新数组。原数组被改变。
26. unshift
a = [ "b", "c", "d" ]
a.unshift("a") # => ["a", "b", "c", "d"]
a.unshift(1, 2) # => [1, 2, "a", "b", "c", "d"]
在头部加入元素,原数组元素往后移。
27. shuffle
[ 1, 2, 3, 4, 5, 1 ].shuffle # => [5, 1, 3, 4, 1, 2]
将原数组随机打乱。
28. sort
a = [ "d", "a", "e", "c", "b" ]
a.sort! # => ["a", "b", "c", "d", "e"]
a # => ["a", "b", "c", "d", "e"]
返回排序好的数组。
29. values_at
a = %w{ a b c d e f }
a.values_at(1, 3, 5) # => ["b", "d", "f"]
a.values_at(1, 3, 5, 7) # => ["b", "d", "f", nil]
a.values_at(-1, -3, -5, -7) # => ["f", "d", "b", nil]
a.values_at(1..3, 2...5) # => ["b", "c", "d", "c", "d", "e"]
一次取回多个索引位置的值。
30. uniq
a = [ "a", "a", "b", "b", "c" ]
a.uniq # => ["a", "b", "c"]
返回数组中不同的元素。原数组不受影响。
Ruby迭代器each、map、collect、inject
说明:
each——连续访问集合的所有元素
collect—-从集合中获得各个元素传递给block,block返回的结果生成新的集合。
map——-同collect。
inject——遍历集合中的各个元素,将各个元素累积成返回一个值。
例子:
def debug(arr)
puts '--------'
puts arr
end
h = [1,2,3,4,5]
h1 = h
h1.each{|v|puts sprintf('values is:%s',v)}
h2 = h.collect{|x| [x,x*2]}
debug h2
h3 = h.map{|x| x*3 }
debug h3
h4 = h.inject{|sum,item| sum+item}
debug h4
结果:
values is:1
values is:2
values is:3
values is:4
values is:5
--------
1
2
2
4
3
6
4
8
5
10
--------
3
6
9
12
15
--------
15
names = %w[ruby rails java python cookoo firebody]
等同于:
names = ["ruby", "rails", "java", "python", "cookoo", "firebody"]
arr = [1,2,3]
1) arr2 = arr.each{|element| element = element * 2} #arr与arr2仍然都等于[1,2,3] each返回原数组 遍历内对元素的更改不会保存
2) arr2 = arr.map{|element| element = element* 2} #arr等于[1,2,3] arr2等于[2,4,6] map返回更改后的数组 遍历内对元素的更改不会保存
3) arr2 = arr.map!{|element| element = element * 2} #arr与arr2都等于[2,4,6] map!返回更改后的数组 遍历对元素内的更改会保存
collect 效果等于 map
collect! 效果等于map!
if ($ != jQuery) { $ = jQuery.noConflict(); }
1. &
[ 1, 1, 3, 5 ] & [ 1, 2, 3 ] # => [1, 3]
取两个数组中都有的元素,但只取一个,不重复取。
2. *
[ 1, 2, 3 ] * 3 # => [1, 2, 3, 1, 2, 3, 1, 2, 3]
如果*号后面跟的是数字n,将原先数组中的所有元素重复n次,串联起来。相当于普通数字的乘法操作。
[ 1, 2, 3 ] * "--" # => "1--2--3"
如果*号后面跟的是字符串,也将返回字符串。
3. +
[ 1, 2, 3 ] + [1, 4, 5 ] # => [1, 2, 3, 1, 4, 5]
简单的将两个数组连接在一起,不删除重复元素。
4. -
[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]
# => [3, 3, 5]
从第一个数组中删除所有出现在第二给数组中的元素。
5. <<
[ 1, 2 ] << "c" << "d" << [ 3, 4 ] << [3, 4]
# => [1, 2, "c", "d", [3, 4], [3, 4]]
在数组末尾添加新元素,也不管重复不重复。
6. ==
[ "a", "c" ] == [ "a", "c", 7 ] # => false
[ "a", "c", 7 ] == [ "a", "c", 7 ] # => true
[ "a", "c", 7 ] == [ "a", "d", "f" ] # => false
判断两个数组是否相等——数组相等的前提是,数组所有元素相等,数组大小也当然相等。
7. |
[ "a", "b", "c" ] | [ "c", "d", "a" ]
# => ["a", "b", "c", "d"]
取两个数组中所有元素组成的集合,删除重复元素。
8. at
a = [ "a", "b", "c", "d", "e" ]
a.at(0) # => "a"
a.at(-1) # => "e"
a.at(5) # => nil
取回某个索引中的元素,倒数第一个索引是-1,第二个是-2。
9. clear
a = [ "a", "b", "c", "d", "e" ]
a.clear # => []
删除数组中的所有元素
10. collect!
a = [ "a", "b", "c", "d" ]
a.collect! {|x| x + "$" } # => ["a$", "b$", "c$", "d$"]
a # => ["a$", "b$", "c$", "d$"]
对数组中的每一个元素进行遍历,block中对元素的操作将改变元素的值。
11. compact
[ "a", nil, "b", nil, "c", nil ].compact # => ["a", "b", "c"]
删除数组中所有值为nil的元素,也即压缩数组。
12. concat
[ "a", "b" ].concat( ["c", "d"] ) # => ["a", "b", "c", "d"]
将第二个数组中的元素添加在第一个数组末尾,组成新数组。
13. count
[1, 2, 3, 4].count(3) # => 1
[1, 2, 3,3, 4].count(3) # => 2
[1, 2, 3, 4].count {|obj| obj > 2 } # => 2
计算数组中等于某个值的元素有几个。
14. delete
a = [ "a", "b", "b", "b", "c" ]
a.delete("b") # => "b"
a # => ["a", "c"]
a.delete("z") # => nil
a.delete("z") { "not found" } # => "not found"
删除数组中值为某个给定值的元素。
15. each
a = [ "a", "b", "c" ]
a.each {|x| print x, " -- " }
result :
a -- b -- c --
遍历数组,打印元素值。
16. each_index
a = [ "a", "b", "c" ]
a.each_index {|x| print x, " -- " }
result :
0 -- 1 -- 2 --
遍历数组,打印索引。
17. empty?
[].empty? # => true
[ 1, 2, 3 ].empty? # => false
判断数组是否为空。
18. join
[ "a", "b", "c" ].join # => "abc"
[ "a", "b", "c" ].join("-") # => "a-b-c"
将数组中的元素连接成字符串。如果给定参数,则在每个元素直接加入该参数。
19. last
[ "w", "x", "y", "z" ].last # => "z"
[ "w", "x", "y", "z" ].last(1) # => ["z"]
[ "w", "x", "y", "z" ].last(3) # => ["x", "y", "z"]
如果不给定参数,取最后一个元素。如果给定参数n,取最后n个参数组成数组。
20. length
[ 1, nil, 3, nil, 5 ].length # => 5
长度。空元素nil也算元素,计算在长度范围内。
21. pop
a = %w{ f r a b j o u s }
a.pop # => "s"
a # => ["f", "r", "a", "b", "j", "o", "u"]
a.pop(3) # => ["j", "o", "u"]
a # => ["f", "r", "a", "b"]
返回删除了最后n个元素后的数组。
22. push
a = [ "a", "b", "c" ]
a.push("d", "e", "f") # => ["a", "b", "c", "d", "e", "f"]
在数组末尾插入元素。
23. replace
a = [ "a", "b", "c", "d", "e" ]
a.replace([ "x", "y", "z" ]) # => ["x", "y", "z"]
a # => ["x", "y", "z"]
用新数组替换旧数组。
24. reverse
[ "a", "b", "c" ].reverse # => ["c", "b", "a"]
[ 1 ].reverse # => [1]
反转数组。
25. shift
args = [ "-m", "-q", "-v", "filename" ]
args.shift # => "-m"
args.shift(2) # => ["-q", "-v"]
args # => ["filename"]
从数组头部删除n个元素,并将他们返回。若删除的是一个,则返回字符串。若删除两个以上元素,则返回这n个组成的新数组。原数组被改变。
26. unshift
a = [ "b", "c", "d" ]
a.unshift("a") # => ["a", "b", "c", "d"]
a.unshift(1, 2) # => [1, 2, "a", "b", "c", "d"]
在头部加入元素,原数组元素往后移。
27. shuffle
[ 1, 2, 3, 4, 5, 1 ].shuffle # => [5, 1, 3, 4, 1, 2]
将原数组随机打乱。
28. sort
a = [ "d", "a", "e", "c", "b" ]
a.sort! # => ["a", "b", "c", "d", "e"]
a # => ["a", "b", "c", "d", "e"]
返回排序好的数组。
29. values_at
a = %w{ a b c d e f }
a.values_at(1, 3, 5) # => ["b", "d", "f"]
a.values_at(1, 3, 5, 7) # => ["b", "d", "f", nil]
a.values_at(-1, -3, -5, -7) # => ["f", "d", "b", nil]
a.values_at(1..3, 2...5) # => ["b", "c", "d", "c", "d", "e"]
一次取回多个索引位置的值。
30. uniq
a = [ "a", "a", "b", "b", "c" ]
a.uniq # => ["a", "b", "c"]
返回数组中不同的元素。原数组不受影响。
Ruby迭代器each、map、collect、inject
说明:
each——连续访问集合的所有元素
collect—-从集合中获得各个元素传递给block,block返回的结果生成新的集合。
map——-同collect。
inject——遍历集合中的各个元素,将各个元素累积成返回一个值。
例子:
def debug(arr)
puts '--------'
puts arr
end
h = [1,2,3,4,5]
h1 = h
h1.each{|v|puts sprintf('values is:%s',v)}
h2 = h.collect{|x| [x,x*2]}
debug h2
h3 = h.map{|x| x*3 }
debug h3
h4 = h.inject{|sum,item| sum+item}
debug h4
结果:
values is:1
values is:2
values is:3
values is:4
values is:5
--------
1
2
2
4
3
6
4
8
5
10
--------
3
6
9
12
15
--------
15
names = %w[ruby rails java python cookoo firebody]
等同于:
names = ["ruby", "rails", "java", "python", "cookoo", "firebody"]
arr = [1,2,3]
1) arr2 = arr.each{|element| element = element * 2} #arr与arr2仍然都等于[1,2,3] each返回原数组 遍历内对元素的更改不会保存
2) arr2 = arr.map{|element| element = element* 2} #arr等于[1,2,3] arr2等于[2,4,6] map返回更改后的数组 遍历内对元素的更改不会保存
3) arr2 = arr.map!{|element| element = element * 2} #arr与arr2都等于[2,4,6] map!返回更改后的数组 遍历对元素内的更改会保存
collect 效果等于 map
collect! 效果等于map!
if ($ != jQuery) { $ = jQuery.noConflict(); }
发表评论
-
ruby 中 block 的使用方法
2011-07-18 18:51 1606对包含代码的字符串和block求解。 Ruby提供了多种不同类 ... -
ruby 中的 block
2011-07-18 18:25 9534.2 Blocks and Procs 1)bloc ... -
ruby 的 字符串
2011-07-17 15:56 1261%{String} 用于创建一个 ... -
ruby 中的 catch throw
2011-07-17 11:42 3111使用raise,rescue用来处理出错的情况,同时也可以使处 ... -
ruby 中的 module_function 关键字
2011-07-17 10:34 1895模块是ruby特有的功能之一。模块和类很像,但和类最大的不同在 ... -
ruby 中的 respond_to 和send 方法
2011-07-16 16:58 1719Ruby中 respond_to? 和 send 的用法 如 ... -
ruby 中的符号
2011-07-16 16:28 14021. "<<" 1) 创建 ... -
ruby 对象的特殊方法
2011-07-16 16:01 1094特殊方法是指某实例所特有的方法。一个对象有哪些行为由对向所属 ... -
ruby 的module 与类
2011-07-16 15:20 2287ruby模块与类 Class类是Module的子类,类是一种 ... -
jvm 默认内存
2011-06-14 11:42 0jvm 默认内存 java版本: java version ... -
rpc的实现 Apache Avro 与 Thrift 比较
2011-04-22 09:41 0http://www.tbdata.org/archives/ ... -
tomcat 启动报错 Cannot assign requested address
2010-12-28 22:35 2287java.net.BindException: Cannot ... -
katta
2010-11-18 20:19 0katta http://jiajiam.spaces.li ... -
zookeeper
2010-11-15 22:47 781http://hupy.iteye.com/blog/4433 ... -
temp
2010-10-26 02:15 0廖总好: 刚刚收到电 ... -
apache 模式模式
2010-09-17 18:06 0http://hi.baidu.com/zhangguansh ... -
wait 实例 关于异常 java.lang.IllegalMonitorStateException: current thread not owner
2010-09-14 11:30 0public class ThreadTest { ... -
java 线程模型
2010-09-02 17:59 0线程 线程(thr ... -
java 架构
2010-09-02 14:03 0aaa -
java RMI-IIOP 介绍
2010-09-02 11:28 0RMI 和 CORBA 常被视为相互竞 ...
相关推荐
通过本文,我们深入了解了 Ruby 数组的基本概念、创建方式以及常用的操作方法。Ruby 数组作为一种灵活的数据结构,在实际开发中扮演着重要角色,无论是处理数据还是实现特定逻辑功能,都离不开对数组的有效管理和...
在Ruby数组中,元素可以通过索引来访问和操作,索引通常从0开始。 ### 数组创建 Ruby提供多种创建数组的方法。最常见的是通过方括号`[]`来创建,例如: ```ruby arr = [1, 2, 3, "four", true] # 创建包含不同类型...
2. **数组操作**:数组支持数学运算,如加法和乘法。加法操作符`+`用于合并两个数组,如`ary + [“foo”, “bar”]`将两个数组连接成一个新的数组。乘法操作符`*`用于重复数组,`ary * 2`会将数组ary复制一份并拼接...
本文将详细介绍Ruby中创建数组的几种方法,以及如何访问和操作数组的元素。 首先,创建一个空数组是通过`Array.new`方法实现的。例如,`array = Array.new`将创建一个空数组,并将其赋值给变量`array`。这样做的...
这篇文章将深入介绍Ruby数组的一些核心概念和使用方法。 首先,Ruby数组是有序的,这意味着每个元素都有一个唯一的整数索引与之关联。数组的索引从0开始,就像C或Java语言一样。此外,Ruby还支持负数索引,-1表示...
在Ruby中操作Excel文件主要是通过`win32ole`库来实现的,这个库允许Ruby程序与Windows操作系统中的Office应用程序进行交互,如Microsoft Excel。以下是关于如何使用Ruby操作Excel的详细步骤和知识点: 1. **引入win...
D瓜哥在学Ruby,正好也写一篇“Ruby入门教程”。需要说明一下,这篇文章适合有编程基础的,但是没接触过Ruby的新手。而且,这篇文章侧重入门,老鸟可以直接飞过。(如果能帮忙检查一下是否有描述不当,甚至错误的...
简单数组操作简介 学习目标 确定数组上方法调用的结果 执行简单的数组操作 介绍 在先前的实验室中,您学习了如何创建数组和访问数组的元素。 现在,您可以使用不同的Ruby方法来操纵数组了。 分叉并克隆此实验室。 ...
1. **Ruby Map**: Map函数允许我们将一个操作应用到数组或集合中的每一个元素上,然后返回一个新的数组,包含应用操作后的结果。例如,如果你有一个数组包含数字,你可以用map来将每个元素平方: ```ruby numbers...
具体操作时,使用星号(*)操作符配合Hash构造函数可以实现数组到Hash的转换。 在Ruby的方法中,如果方法名末尾带有感叹号(!),表示该方法会改变原有对象的值,相反,如果不带有感叹号,则会创建一个新的对象进行返回...
{Hornetseye::MultiArray} 提供具有相同类型元素的多维 Ruby 数组。 该扩展旨在与 Masahiro Tanaka 的 NArray 兼容。 但是它允许定义自定义元素类型和对它们的操作。 这项工作还受到了 Ronald Garcia 的 boost::...
在Ruby编程语言中,数组(Arrays)和散列表(Hashes)是两种非常重要的数据结构,它们用于存储和管理对象的集合。数组以整数为索引,而散列表则使用任意对象作为键。这两者都是动态调整大小的,允许在需要时添加新的...
在 Ruby on Rails 开发中,处理日期和时间是常用的操作之一。本文将介绍如何在 Ruby 环境下,结合 Ruby on Rails,获取指定月份的所有日期数。 首先,我们需要知道 Ruby 语言中处理日期的库是 `Date` 类,该类属于 ...
7. **兼容性增强**:Ruby 3.1对其他语言的兼容性进行了增强,比如改进了与C++的互操作性。 8. **YARV虚拟机更新**:Ruby的默认虚拟机YARV也得到了升级,增强了垃圾回收机制,进一步提升了性能。 在使用这个压缩包...
在Ruby的标准库中,`Array`类提供了丰富的实例方法和类方法来处理数组。 ##### 1.1 Class methods **1.1.1 []** 用于创建一个新的数组。例如: ```ruby arr = [1, 2, 3] ``` **1.1.2 new** 创建一个新数组。...
- 如何在不同操作系统上安装Ruby - Ruby版本管理工具如RVM和rbenv的使用 - 开发环境的搭建与配置 3. **基础知识** - 数据类型(数字、字符串、数组等) - 变量与常量 - 控制结构(条件语句、循环语句) 4. *...
3. `array_operations.rb`:演示了Ruby数组的操作,如遍历、添加元素等。 ```ruby arr = [1, 2, 3] arr.each { |num| puts num } arr puts arr.inspect ``` 4. `hash_usage.rb`:展示了Ruby哈希(Hash)的使用,...
此外,Ruby的块(Block)和 Proc 对象让函数式编程变得简单,例如使用`each`方法遍历数组: ```ruby fruits = ["Apple", "Banana", "Cherry"] fruits.each { |fruit| puts fruit } ``` 元编程是Ruby的另一个强大特性...
- 集合操作如查找、排序、合并、过滤等,源代码会提供各种实例,帮助理解Ruby的数组和哈希操作的强大。 6. **文件和I/O** - 文件读写操作,如`File.open`,以及流处理,源代码将展示如何进行文件操作。 - 标准...
6. **数组和哈希的改进**:这一版本中,数组和哈希的创建与操作得到了优化,如`Array#bsearch`和`Hash#slice`等方法的添加,使得数据操作更加便捷。 7. **Ruby调试器改进**:内置的调试工具如`pry`和`byebug`在Ruby...