ruby 的數組操作


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM