转自:http://fujinbing.iteye.com/blog/1126232

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 
-------- 









10 
-------- 



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 的数组操作的更多相关文章

  1. Javascript数组操作

    使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...

  2. JavaScript jQuery 中定义数组与操作及jquery数组操作

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...

  3. php数组操作集锦- 掌握了数组操作, 也就掌握了php

    参考下面的文章, 是很好的: http://www.cnblogs.com/staven/p/5142515.html http://pcwanli.blog.163.com/blog/static/ ...

  4. JavaScript 数组操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. JavaScript中数组操作常用方法

    JavaScript中数组操作常用方法 1.检测数组 1)检测对象是否为数组,使用instanceof 操作符 if(value instanceof Array) { //对数组执行某些操作 } 2 ...

  6. php 常用数组操作

    php常用的数组操作函数,包括数组的赋值.拆分.合并.计算.添加.删除.查询.判断.排序等 array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 <?p ...

  7. 005-Scala数组操作实战详解

    005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer( ...

  8. JavaScript中常见的数组操作函数及用法

    JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...

  9. jQuery_03之事件、动画、类数组操作

    一.事件: 1.模式触发事件:  ①DOM:elem.onXXX();只能触发直接用onXXX绑定的事件处理函数:用addEventistener添加的事件监听无法模拟出发触发:  ②jQuery:$ ...

随机推荐

  1. python脚本11_求10万以内所有素数

    #求10万以内所有素数 num = int(input(">>>")) strs = '' for i in range(2,num): for c in ran ...

  2. raid write back / write throught

    RAID write back指的是raid控制器能够将写入的数据写入自己的缓存中,并把它们安排到后续再执行,这样做的好处就是不需要等实际写入磁盘再返回,因此写入更快.对于数据库而言,这一点更为重要, ...

  3. 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理

    重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...

  4. qt5.2.1在linux下去除最大化和最小化按钮

    #include <QtGui/QGuiApplication> #include <QDebug> #include <QScreen> #include &qu ...

  5. laravel中单独获取一个错误信息的方法

    获取单独的错误信息的方法

  6. Oracle recovery manager failed to restore

    解决办法: 1:清理过期失效的备份, 2:增加recovery_file_dest_size参数值即可: SQL> show parameter db_recover NAME          ...

  7. springcloud- FeginClient 调用统一拦截添加请求头 RequestInterceptor ,被调用服务获取请求头

    使用场景: 在springcloud中通过Fegin调用远端RestApi的时候,经常需要传递一些参数信息到被调用服务中去,比如从A服务调用B服务的时候, 需要将当前用户信息传递到B调用的服务中去,我 ...

  8. 【前端工具】seajs打包部署工具spm的使用总结

    相信使用seajs的好处大家都是知道的,接触seajs好像是在半年前,当时还不知道页面阻塞问题,这里不带多余的话了. seajs实现了模块化的开发,一个网站如果分了很多很多模块的话,等开发完成了,发现 ...

  9. 【css】25个漂亮的响应式布局的web设计【转】

    响应的web设计的做法是提高用户的浏览质量,并在不同设备上能够完美的浏览使用,就像大前端推出的D7主题.看看下面美丽的响应的网站布局,通过本文你会在以后的设计中找到响应的web设计的灵感. 1.Mar ...

  10. Linux下的网络设定

    一.IP相关介绍 1.IP是internet protocal的简称,也叫网络进程. 2.ipv4全称internet protocal version 4.它是由32个二进制组成:改为十进制的话,一 ...