`

[转帖]ruby的数组操作

    博客分类:
  • RUBY
阅读更多
[转帖]ruby的数组操作
原文:http://fujinbing.iteye.com/blog/1126232

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(); }
分享到:
评论

相关推荐

    论坛转帖工具.rar

    5. **批量操作**:可以一次性处理多个帖子的转帖,适合需要转移大量内容的情况。 压缩包内的文件“论坛转帖工具.htm”很可能是工具的主界面文件,用户双击后会在浏览器中打开,展示工具的界面和操作指南。HTML文件...

    贴吧转帖工具

    通过这款工具,用户可以实现一键转帖和一键8经验签到的功能,极大地简化了传统操作流程,节省了用户的时间,提升了用户体验。 一键转帖功能是该工具的核心亮点。它允许用户快速地将一篇帖子从一个贴吧复制并发布到...

    UBB论坛转帖圣手.exe

    UBB论坛转帖圣手.exeUBB论坛转帖圣手.exe

    农商银行贴现、转帖现及再贴现操作细则.doc

    《农商银行贴现、转帖现及再贴现操作细则》是针对农村商业银行在处理银行承兑汇票贴现、转贴现买入、卖出以及再贴现业务时的操作规范,旨在规范票据业务流程,保障业务的快速健康发展。以下是根据文档内容提炼的知识...

    股票T+0的操作(转帖).pdf

    【股票T+0操作】是股票市场中一种交易策略,主要指的是在同一天内买入并卖出同一支股票,以此来实现日内交易的盈利。T+0操作法有做多法和做空法两种形式,前者是在已有股票持仓的基础上,买入等量的同一只股票,然后...

    转帖工具插件 for PHPwind 7.5 正式版.rar

    3. **转帖操作**:该插件提供的转帖功能可能包括选择原帖、选择目标版块、保留原有信息(如发帖时间、作者信息)等功能。用户在选定帖子后,一键操作即可完成转帖。 4. **日志记录**:为了便于管理和跟踪,插件可能...

    discuz X2转帖工具、采集工具

    X2转帖工具、采集工具”是针对这个平台设计的辅助软件,主要用于帮助论坛管理员或用户批量发布帖子和采集内容,提高论坛内容更新的效率。 一、批量发帖功能 1. 自动化发布:此工具可以自动化地创建和发布帖子,...

    编辑人员转帖去水印工具

    本篇文章将详细探讨“编辑人员转帖去水印工具”,并介绍如何使用名为Teorex Inpaint的1.0.0.2版本的软件来实现这一目标。 首先,我们要理解什么是水印。水印通常是指在图像或视频中添加的半透明标记,它可以是文字...

    转帖工具ConvertX fordiscuz7.1/7.2 修改增强版.rar

    1.修改自Convert X转帖工具 2.新增批量替换关键词(原来是单个词语替换,可以利用这个功能删除一些网站的防转帖代码) 3.批量随机新增文字(新增内容可自定义,从而实现...8.重新布局优化显示及方便操作 9.不断更新中...

    Html2UBBMaxcj_Softii论坛专用转帖工具

    - **便捷操作**:工具可能提供简单的拖放或复制粘贴操作,使得转换过程快速且直观。 3. **使用场景**: - **论坛分享**:用户在其他网站复制含有HTML格式的帖子到Softii论坛时,使用此工具可确保帖子的格式正确...

    转帖图片提取工具 v1.0.zip

    转帖图片提取工具可以对论坛图片附件信息进行清除,只保留图片代码,操作很简单,推荐有需要转帖图片工具的朋友下载 转帖图片提取工具使用方法: 将IP138上处理过的东西复制到上方的编辑框内,点击只要图片,下面...

    [转帖]世界编程大赛第一名写的程序

    标题和描述中的“世界编程大赛第一名写的程序”这一知识点,实际上指向了计算机科学与编程竞赛领域的一个重要概念:即在高水平的编程比赛中,优胜者所编写的代码往往蕴含着高级算法、数据结构以及编程技巧。...

    一键转帖功能插件 for 帝国CMS 6.0 GBK utf8 V1.0.rar

    《一键转帖功能插件 for 帝国CMS 6.0 GBK utf8 V1.0》 本文将深入探讨“一键转帖功能插件”在帝国CMS 6.0系统中的应用与实现,该插件适用于GBK及UTF-8编码环境,旨在提升网站内容的分享与传播效率。我们将从安装...

    亚信联创面试题(转帖集)

    还让写了两个函数,分别是动态实现二维数组,以及如何释放二维数组,记得当时在大学的时候,好多课的上机也用过,不过记得不太清了,这些年都忘的差不多了,不过还好,面试官没说什么,就是说了释放有些问题,估计...

    (转帖)4x4x4立体led显示程序

    6. **位操作**:在处理单个LED状态时,位操作是常见的技巧,因为每个LED的状态可以用一个二进制位表示。通过位移和按位逻辑运算,可以高效地更新和查询LED的状态。 7. **嵌入式系统编程**:在这样的项目中,理解微...

    一键转帖功能插件 for 帝国CMS v1.0.rar

    "一键转帖功能插件 for 帝国CMS v1.0.rar" 是一个专为帝国CMS设计的扩展工具,其主要目标是简化用户在网站上分享内容的过程,提高用户体验。这个插件允许用户轻松地将网站上的文章或信息复制并转发到其他平台,如...

    轻松转帖之突破网页复制限制宣贯.pdf

    【网页复制限制】 网页复制限制是许多网站为了保护其内容不被随意复制而采取的一种措施...不过,需要注意的是,这些方法可能涉及版权和隐私问题,因此在实际操作时应尊重网站的版权政策,并确保合法合规使用网络资源。

    用PHP批量生成图片缩略图——活跃论坛转帖

    在论坛转帖的场景下,这个过程可能会更复杂,因为需要考虑图片的显示顺序、缓存策略、错误处理等因素。例如,可能需要在数据库中记录每个图片的缩略图路径,以便快速加载,同时处理上传失败或网络中断的情况。 总的...

    高三政治教学总结(转帖)教学工作总结.doc

    高三政治教学总结(转帖)教学工作总结.doc

Global site tag (gtag.js) - Google Analytics