1. 程式人生 > >Ruby 中陣列的常用操作

Ruby 中陣列的常用操作

企業級開發中很多時候,並不是去操作專案框架,更多的時候我們是瞭解業務邏輯然後去操作資料的增刪該查。今天就Ruby 中運算元組的方法進行總結。感謝新浪小邊邊的部落格

陣列的建立和初始化

a = Array.[](1,2,3,4)
b = Array[1,2,3,4]
c = [1,2,3,4]
d = Array.new #建立一個空陣列
e = Array.new(3) #[nil,nil,nil] 初始大小3
f = Array.new(3,"xx") #["xx","xx","xx"] 初始大小3 初始值"xx"
f[0].capitalize! #=> ["Xx","Xx","Xx"
] g = Array.new(3){"yy"} #=> ["yy","yy","yy"] g[0].capitalize! #=>["Yy","yy","yy"]

陣列元素取值和賦值

a = [1,2,3,4,5,6]
b = a[0] #=>1    等同於c = a.at[0] #=>1 取出陣列第1位的值
d = a[-2] #=>5  等同於e = a.at[-2] #=>5 取出 倒數第2位
f = a[9] #=>nil 不存在第9位
g = a.at[9] #=>nil 當第9位不存在
h = a[3,3] #=>[4,5,6] 從第4位開始,一共3個
i = a[2..4] #=>[3,4,5] 第2位後 到第4位之間 j = a[2...4] #=>[3,4] 第2位後 到第4位之前(不包括4位) h,i,j 這幾個陣列時間的差別很小,但是結果缺完全不一樣。 a[1] = 8 #=> [1,8,3,4,5,6] 第2位被重新賦值 a[1,3] = [10,30,30] #=> [1,10,30,30,5,6] 從第2為開始替換陣列 共3位 a[0..3] = [2,4,6,8] #=> [2,4,6,8,5,6] 從第1位開始到第4位 替換 a[-1] = 12 #=> [2,4,6,8,5,12] 替換最後一位
k = [2,4,6,8,10] k[1..2] = [3,3,3] #=>[2,3,3,3,8,10] 替換第2位~第三位之間的 k[7] = 99 #=> [2,3,3,3,8,10,nil,99] 第8位增加99 第7位不存在 m = [1,3,5,7,9] m[2] = [20,30] #=> [1,2,[20,30],7,9] 把第3位替換為此陣列 m = [1,3,5,7,9] m[2..2]=[20,30] #=> [1,2,20,30,7,9] 在第2位之間加入陣列 x = [0,2,4,6,8,10,12] a = x.slice(2) #=>4 取第3位 b = x.slice(2,4) #=>[4,6,8,10] 從第3位開始取 4個數 c = x.slice(2..4) #=>[4,6,8] 從第3位..到第5位 x.first #=>0 取第1位 x.last #=>12 取最後1位 x = [10,20,30,40,50,60] y = x.values_at(0,1,4) #=>[10,20,50] 取出值在1位 2位 5位上的數

求陣列的長度

x = ["a","b","c","d"]
a = x.length #=>4 等同於 a = x.size #=>4
y = [1,2,nil,nil,3,4]
c = y.size  #=>6
d = y.length #=>6
e = y.nitems #=>4

陣列比較

a = [1,2,3,9,9]
b = [1,2,4,1,1]
c = a <=> b #=> -1 意思是 a
d = [1,2,3]
e = [1,2,3,4]
c = a <=> b #=> -1 意思是 a
定義一個比較方法class Comparable,因為陣列預設只有 <=> 現在通過自寫class增加 < > <= >=
class Comparable
def <(other)
(self <=>other) == -1
end
def <=(other)
(self < other) or (self == other)
end
def >(other)
(self <=> other) == 1
end
def >=(other)
(self > other) or (self == other)
end
end
然後就可以直接陣列 a < b 返回true

陣列排序

words = %w(the quick brown fox) #定義陣列
words.sort #=> ["brown","fox","quick","the"] #sort進行排序
正常排序
a.sort #=> ["1", "2", "3", "5", "6", "four", "three", "two"]
另一方法比較排序 返回1
a.sort{|x,y| x.to_s <=> y.to_s} #=> ["1", "2", "3", "5", "6", "four", "three", "two"]
相反比較排序 返回-1
a.sort{|x,y| x.to_s <=> y.to_s} #=> ["two", "three", "four", "6", "5", "3", "2", "1"]
檔案大小排列
files.sort{|x,y| File.size(x) <=> File.size(y)}
或
files.sort_by{|x| File.size(x)}
按名字,年齡,身高排列
lists.sort_by{|x| x.name,x.age,x.height}

按條件從陣列中查詢

x = [5,8,12,9,4,30]
查詢最大最小值x.max#=>30 x.min#=>4
a = %w[January February March April May] 新建一個數組
正在查詢
a.grep(/ary/)
#=> ["January", "February"]
a.grep(/ary/){|i| i.length}
#=> [7, 8] 查詢出來的內容轉換為個數.

刪除陣列中的重複項 (uniq或uniq!)
刪除陣列中為nil的元素
a = [1,2,nil,3,nil,4,5]
#=> [1, 2, nil, 3, nil, 4, 5]
a.compact
#=> [1, 2, 3, 4, 5]
a.compact!
#=> [1, 2, 3, 4, 5]
a
#=> [1, 2, 3, 4, 5]
刪除陣列中指定元素
a = [10,12,14,16,18]
#=> [10, 12, 14, 16, 18]
a.delete_at(3)
#=> 16 #刪除第4位,返回被刪除物件,如果不存在返回nil
a
#=> [10, 12, 14, 18]
a.delete(10) 
#=>10 #返回10

陣列的追加和拼接

x=[1,5,9]
#=> [1, 5, 9]
x << 13 
#=> [1, 5, 9, 13]
x << 16 << 18
#=> [1, 5, 9, 13, 16, 18]  #主要時<< 這個符號加入附加 

x=[1,2]
y=[3,4]
z=[5,6]

b=y+z
#=> [3, 4, 5, 6]
b +=x
#=> [3, 4, 5, 6, 1, 2]

z.concat y
#=> [5, 6, 3, 4]

將陣列轉化為字串

words = %w(Son I am able she said)
#=> ["Son", "I", "am", "able", "she", "said"]
words.join(",")
#=> "Son,I,am,able,she,said"

陣列的倒置

a=[1,2,3]
#=> [1, 2, 3]
a.reverse
#=> [3, 2, 1]
a.reverse!
#=> [3, 2, 1]
a
#=> [3, 2, 1]

統計陣列中元素出現的次數

class Array
def count
k=Hash.new(0)
self.each{|x| k[x]+=1}
k
end
end
meal=%w[spam spam eggs ham eggs spam]
items=meal.count
#items is {"ham"=>1,"spam"=>3,"eggs"=>2}
spams=items["spam"] #3