Ruby 数组操作方法汇总

1、数组定义

arr1 = []

arr2 = Array.new

arr3 = ['1','2','3']

2、输出

print arr3,"\n"   #123

puts arr3[0]      #1

print arr3.join(",")  #1,2,3

3、访问数组元素

arr1[0]

arr1[-1]    #这个比较有意思,意思是最后一个的数据

arr1.first

arr1.last

arr1.max

arr1.min

arr1.length

arr1.size

4、数组操作

arr3[4] = '5'                    #此时arr3[3]默认尾nil

arr3.delete_at(3)                #删除指定下标的元素

arr3[2] = ["3a","3b","3c"]       #可以这样来做

arr3.delete(["3a","3b","3c"])    #可以删除上面添加的

arr3.push('6')                   #插入元素

arr3.insert(3,"b")               #在指定位置插入新元素

arr3<<"f"<<2                     #从左至右一次加入元素

arr3.pop                         #删除尾元素

arr3.shift                       #删除首元素

arr3.clear                       #清空数组

5、数组运算

aaa = [" aa ",4,5," bb "]

bbb = [4,1,3,2,5]

print aaa + bbb,"\n"        # aa 45 bb 41325

print aaa*2,"\n"        # aa 45 66  aa 45 66 

print bbb - aaa            #132

print aaa | bbb,"\n"        # aa 45 bb 132

print aaa & bbb,"\n"        #45

print bbb.sort,"\n"        #12345 排序

print aaa.reverse,"\n"        # bb 54 aa 倒置

print bbb.sort.reverse,"\n"     #54321 降序

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(); }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 8,972评论 0 13
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,323评论 0 2
  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 1,584评论 0 9
  • //JS数组常用方法及其应用/** * 1.push(): 向数组尾部添加一个或多个元素,并返回添加新元素后的数组...
    李二狗的星球阅读 446评论 0 0
  • # 数组部分 # 1.## array_chunk($arr, $size [, $preserve_key = ...
    clothTiger阅读 1,155评论 0 1