1、數(shù)組定義
arr1 = []
arr2 = Array.new
arr3 = ['1','2','3']
2、輸出
print arr3,"\n" ? #123
puts arr3[0] ? ? ?#1
print arr3.join(",") ?#1,2,3
3、訪問數(shù)組元素
arr1[0]
arr1[-1] ? ?#這個(gè)比較有意思,意思是最后一個(gè)的數(shù)據(jù)
arr1.first
arr1.last
arr1.max
arr1.min
arr1.length
arr1.size
4、數(shù)組操作
arr3[4] = '5' ? ? ? ? ? ? ? ? ? ?#此時(shí)arr3[3]默認(rèn)尾nil
arr3.delete_at(3) ? ? ? ? ? ? ? ?#刪除指定下標(biāo)的元素
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 ? ? ? ? ? ? ? ? ? ? ? #清空數(shù)組
5、數(shù)組運(yùn)算
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]?
取兩個(gè)數(shù)組中都有的元素,但只取一個(gè),不重復(fù)取。?
2. *?
[ 1, 2, 3 ] * 3 # => [1, 2, 3, 1, 2, 3, 1, 2, 3]?
如果*號(hào)后面跟的是數(shù)字n,將原先數(shù)組中的所有元素重復(fù)n次,串聯(lián)起來。相當(dāng)于普通數(shù)字的乘法操作。?
[ 1, 2, 3 ] * "--" # => "1--2--3"?
如果*號(hào)后面跟的是字符串,也將返回字符串。?
3. +?
[ 1, 2, 3 ] + [1, 4, 5 ] # => [1, 2, 3, 1, 4, 5]?
簡(jiǎn)單的將兩個(gè)數(shù)組連接在一起,不刪除重復(fù)元素。?
4. -?
[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]?
# => [3, 3, 5]?
從第一個(gè)數(shù)組中刪除所有出現(xiàn)在第二給數(shù)組中的元素。?
5. <<?
[ 1, 2 ] << "c" << "d" << [ 3, 4 ] << [3, 4]?
# => [1, 2, "c", "d", [3, 4], [3, 4]]?
在數(shù)組末尾添加新元素,也不管重復(fù)不重復(fù)。?
6. ==?
[ "a", "c" ] == [ "a", "c", 7 ] # => false?
[ "a", "c", 7 ] == [ "a", "c", 7 ] # => true?
[ "a", "c", 7 ] == [ "a", "d", "f" ] # => false?
判斷兩個(gè)數(shù)組是否相等——數(shù)組相等的前提是,數(shù)組所有元素相等,數(shù)組大小也當(dāng)然相等。?
7. |?
[ "a", "b", "c" ] | [ "c", "d", "a" ]?
# => ["a", "b", "c", "d"]?
取兩個(gè)數(shù)組中所有元素組成的集合,刪除重復(fù)元素。?
8. at?
a = [ "a", "b", "c", "d", "e" ]?
a.at(0) # => "a"?
a.at(-1) # => "e"?
a.at(5) # => nil?
取回某個(gè)索引中的元素,倒數(shù)第一個(gè)索引是-1,第二個(gè)是-2。?
9. clear?
a = [ "a", "b", "c", "d", "e" ]?
a.clear # => []?
刪除數(shù)組中的所有元素?
10. collect!?
a = [ "a", "b", "c", "d" ]?
a.collect! {|x| x + "$" } # => ["a$", "b$", "c$", "d$"]?
a # => ["a$", "b$", "c$", "d$"]?
對(duì)數(shù)組中的每一個(gè)元素進(jìn)行遍歷,block中對(duì)元素的操作將改變?cè)氐闹怠?
11. compact?
[ "a", nil, "b", nil, "c", nil ].compact # => ["a", "b", "c"]?
刪除數(shù)組中所有值為nil的元素,也即壓縮數(shù)組。?
12. concat?
[ "a", "b" ].concat( ["c", "d"] ) # => ["a", "b", "c", "d"]?
將第二個(gè)數(shù)組中的元素添加在第一個(gè)數(shù)組末尾,組成新數(shù)組。?
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?
計(jì)算數(shù)組中等于某個(gè)值的元素有幾個(gè)。?
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"?
刪除數(shù)組中值為某個(gè)給定值的元素。?
15. each?
a = [ "a", "b", "c" ]?
a.each {|x| print x, " -- " }?
result :?
a -- b -- c --?
遍歷數(shù)組,打印元素值。?
16. each_index?
a = [ "a", "b", "c" ]?
a.each_index {|x| print x, " -- " }?
result :?
0 -- 1 -- 2 --?
遍歷數(shù)組,打印索引。?
17. empty??
[].empty? # => true?
[ 1, 2, 3 ].empty? # => false?
判斷數(shù)組是否為空。?
18. join?
[ "a", "b", "c" ].join # => "abc"?
[ "a", "b", "c" ].join("-") # => "a-b-c"?
將數(shù)組中的元素連接成字符串。如果給定參數(shù),則在每個(gè)元素直接加入該參數(shù)。?
19. last?
[ "w", "x", "y", "z" ].last # => "z"?
[ "w", "x", "y", "z" ].last(1) # => ["z"]?
[ "w", "x", "y", "z" ].last(3) # => ["x", "y", "z"]?
如果不給定參數(shù),取最后一個(gè)元素。如果給定參數(shù)n,取最后n個(gè)參數(shù)組成數(shù)組。?
20. length?
[ 1, nil, 3, nil, 5 ].length # => 5?
長度??赵豱il也算元素,計(jì)算在長度范圍內(nèi)。?
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個(gè)元素后的數(shù)組。?
22. push?
a = [ "a", "b", "c" ]?
a.push("d", "e", "f") # => ["a", "b", "c", "d", "e", "f"]?
在數(shù)組末尾插入元素。?
23. replace?
a = [ "a", "b", "c", "d", "e" ]?
a.replace([ "x", "y", "z" ]) # => ["x", "y", "z"]?
a # => ["x", "y", "z"]?
用新數(shù)組替換舊數(shù)組。?
24. reverse?
[ "a", "b", "c" ].reverse # => ["c", "b", "a"]?
[ 1 ].reverse # => [1]?
反轉(zhuǎn)數(shù)組。?
25. shift?
args = [ "-m", "-q", "-v", "filename" ]?
args.shift # => "-m"?
args.shift(2) # => ["-q", "-v"]?
args # => ["filename"]?
從數(shù)組頭部刪除n個(gè)元素,并將他們返回。若刪除的是一個(gè),則返回字符串。若刪除兩個(gè)以上元素,則返回這n個(gè)組成的新數(shù)組。原數(shù)組被改變。?
26. unshift?
a = [ "b", "c", "d" ]?
a.unshift("a") # => ["a", "b", "c", "d"]?
a.unshift(1, 2) # => [1, 2, "a", "b", "c", "d"]?
在頭部加入元素,原數(shù)組元素往后移。?
27. shuffle?
[ 1, 2, 3, 4, 5, 1 ].shuffle # => [5, 1, 3, 4, 1, 2]?
將原數(shù)組隨機(jī)打亂。?
28. sort?
a = [ "d", "a", "e", "c", "b" ]?
a.sort! # => ["a", "b", "c", "d", "e"]?
a # => ["a", "b", "c", "d", "e"]?
返回排序好的數(shù)組。?
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"]?
一次取回多個(gè)索引位置的值。?
30. uniq?
a = [ "a", "a", "b", "b", "c" ]?
a.uniq # => ["a", "b", "c"]?
返回?cái)?shù)組中不同的元素。原數(shù)組不受影響。?
Ruby迭代器each、map、collect、inject?
說明:?
each——連續(xù)訪問集合的所有元素?
collect—-從集合中獲得各個(gè)元素傳遞給block,block返回的結(jié)果生成新的集合。?
map——-同collect。?
inject——遍歷集合中的各個(gè)元素,將各個(gè)元素累積成返回一個(gè)值。?
例子:?
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 ? ?
結(jié)果:?
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返回原數(shù)組 遍歷內(nèi)對(duì)元素的更改不會(huì)保存?
2) arr2 = arr.map{|element| element = element* 2} #arr等于[1,2,3] arr2等于[2,4,6] map返回更改后的數(shù)組 遍歷內(nèi)對(duì)元素的更改不會(huì)保存?
3) arr2 = arr.map!{|element| element = element * 2} #arr與arr2都等于[2,4,6] map!返回更改后的數(shù)組 遍歷對(duì)元素內(nèi)的更改會(huì)保存?
collect 效果等于 map?
collect! 效果等于map!?
if ($ != jQuery) { $ = jQuery.noConflict(); }