ruby中數組的常用函數

原文轉自 東傑書屋
在程序中定義一個數組
在程序中定義一個數組,因爲我們在下面說明。

fruits = ["apple", "orange", "lemon"]
scores = [55, 49, 100, 150, 0]

如果你是指使用數組的數組#[]的方法,我們將指定數目的元素的數組作爲參數。我單元號是從0開始。在上面的例子中,fruits[0]返回“apple”,scores[3]將返回150。
也可以是一個(嵌套)嵌套的序列如下所示。

fruits = [3, ["apple", 250], ["orange", 400], ["lemon", 300]]

p fruits[0] #=> 3
p fruits[1][1] #=> 250
p fruits[3][0] #=> "lemon"

輸出數組元素的一個逗號分隔的列表
您將能夠得到一個字符串分隔的任何字符串,數組中的元素使用Array#join方法。

p ["apple", "orange", "lemon"].join(',') #=> "apple,orange,lemon"
p ["apple", "orange", "lemon"].join('#') #=> "apple#orange#lemon"
p [55, 49, 100, 100, 0].join(',') #=> "55,49,100,100,0"
p [3, ["apple", 250], ["orange", 400]].join(',') #=> "3,apple,250,orange,400"

獲取在數組中的元素數
你可以得到數組中的元素個數的數組長度數組大小的方法或方法。

p ["apple", "orange", "lemon"].size #=> 3
p ["apple", "orange", "lemon"].length #=> 3
p [55, 49, 100, 100, 0].size #=> 5
p [3, ["apple", 250], ["orange", 400]].size #=> 3

將元素添加到數組

如果你想生成一個數組添加一個元素後,我們可以使用Array#<<的方法,Array#unshift方法,Array#push。

array#<<將元素追加早最後,array#unshift方法可以將元素添加到數組開頭。
A = [1,2,3,4,5]#=> [1,2,3,4,5]

A << 99#=> [1,2,3,4,5,99]
A.Unshift (99)#=> [99,1,2,3,4,5,99]
Array#push方法可以被添加到的數組元素的結尾
A = [1,2,3,4,5]

A.Push(10)#=> [1,2,3,4,5,10]
從開頭或結尾的數組元素刪除
在Array#shift的方法,可以檢索的元素,從一開始的數組。array#pop方法是可以檢索的數組中的元素。提取值的數組移位的方法,數組#pop方法,數組中的元素的提取物中刪除。
a = [1,2,3,4,5]

a.push(10) #=> [1, 2, 3, 4, 5, 10]
p a.pop #=> 10
p a.pop #=> 5
p a #=> [1, 2, 3, 4]
提取一個子數組

你可以把部分的數組用array#slice的方法或Array#[]的方法。
a = [1,2,3,4,5]

p a[0,2] #=> [1, 2]
p a[1..3] #=> [2, 3, 4]
p a.slice(0,2) #=> [1, 2]
p a.slice(1..3) #=> [2, 3, 4]

array#slice! 方法會改變原來數組元素
a = [1,2,3,4,5]

p a.slice!(0,2) #=> [1,2]
p a #=> [3,4,5]

p a.slice!(1,2) #=> [4,5]
p a #=> [3]
填充任何數組的值
您可以使用array#fill方法填充任意元素。這種方法會改變原來數組元素。
a = [1,2,3,4,5]

a.fill(255, 2,2) #=> [1, 2, 255, 255, 5]
a.fill(0, 1..2) #=> [1, 0, 0, 255, 5]
清空數組
您可以用array#clear方法清空數組所有元素。
a = [1,2,3,4,5]
a.clear #=> []

p a #=> []
連接數組
可以使用array#+或者array#concat方法將多個數組連接

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

p a + [10, 20] #=> [1, 2, 3, 4, 5, 10, 20]
p a #=> [1, 2, 3, 4, 5]
a.concat([10, 20]) #=> [1, 2, 3, 4, 5, 10, 20]
p a #=> [1, 2, 3, 4, 5, 10, 20]

數組的交集與並集

p [1,3,5,7] | [2,4,6,8] #=> [1, 3, 5, 7, 2, 4, 6, 8]
p [1,2,3,4] | [3,4,5,6] #=> [1, 2, 3, 4, 5, 6]

p [1,3,5,7] & [2,4,6,8] #=> []
p [1,2,3,4] & [3,4,5,6] #=> [3, 4]
修改數組中多個元素
a = [1,2,3,4,5]

a[0…2] = [111, 222, 333]
p a #=> [111, 222, 333, 3, 4, 5]

a[3,2] = [444,555] #=> [444, 555]
p a #=> [111, 222, 333, 444, 555, 5]

將多維數組轉換爲一維數組

a = [1,[2,[3,4],5],[6,7]]

p a.flatten #=> [1, 2, 3, 4, 5, 6, 7]
a.flatten! #=> [1, 2, 3, 4, 5, 6, 7]
數組元素排序方法

p [5,1,4,2,3].sort #=> [1, 2, 3, 4, 5]

a = [5,1,4,2,3]
a.sort! #=> [1, 2, 3, 4, 5]
p a #=> [1, 2, 3, 4, 5]

p ["Orange", "Apple", "Lemon"].sort #=> ["Apple", "Lemon", "Orange"]

指定表達式的數組排序

a = ["Hitoshi,045", "Sizuo,046", "Yoshi,0138"]

p a.sort{|a, b| a.split(',')[1] <=> b.split(',')[1]} #=> ["Yoshi,0138", "Hitoshi,045", "Sizuo,046"]

ar = [[2,"b"],[3,"a"],[1,"c"]]
ar.sort{|p,q|p[0]<=>q[0]}
#=> [[1, "c"], [2, "b"], [3, "a"]]
ar.sort{|p,q|p[1]<=>q[1]}
# => [[3, "a"], [2, "b"], [1, "c"]]

反轉數組

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

a.sort! #=> [1, 2, 3, 4, 5]
p a.reverse #=> [5, 4, 3, 2, 1]
a.reverse! #=> [5, 4, 3, 2, 1]

刪除指定位置的數組元素
a = [5,1,4,2,3]

a.delete_at(0) #=> 5
p a #=> [1, 4, 2, 3]

a.delete_at(1) #=> 4
p a #=> [1, 2, 3]
刪除匹配元素
a = [“apple”, “orange”, “lemon”, “apple”, “vine”]

a.delete(“apple”) #=> [“apple”]
p a #=> [“orange”, “lemon”, “vine”]
a.delete(“apple”) { |x| puts “#{x} not found” } #=> “apple not found”
刪除重複元素
a = [30,20,50,30,10,10,40,50]
p a.uniq #=> [30, 20, 50, 10, 40]

a = [“/tmp”,”/home/”,”/etc”,”/tmp”]
a.uniq! #=> [“/tmp”, “/home”, “/etc”]
從數組中刪除指定條件的元素
a = [30,100,50,80,79,40,95]

a.delete_if {|x| x < 80} #=> [100, 80, 95]
p a #=> [100, 80, 95]

p a.reject {|x| x < 90} #=> [100, 95]
p a #=> [100, 80, 95]

a.reject! {|x| x < 90} #=> [100, 95]
p a #=> [100, 95]

a = [“Takeuchi”, “Tanaka”, “Satou”, “Andou”, “Kurasaki”]

a.delete_if {|x| /^T.*/ =~ x} #=> [“Satou”, “Andou”, “Kurasaki”]
數組中提取指定條件的元素
a = [1, 2, 3, 4]
p a.select{|x| x % 2 == 0} # => [2, 4]

b = [[‘Taro’, ‘M’], [‘Hanako’, ‘F’], [‘Jiro’, ‘M’], [‘Sachiko’, ‘F’]]
p b.select{|x| x[1]==’M’} # => [[“Taro”, “M”], [“Jiro”, “M”]]
查找數組元素
a = [“apple”,10,”orange”,[“lemon”,”vine”]]

p a.index(“apple”) #=> 0
p a.index(10) #=> 1
p a.index([“lemon”,”vine”]) #=> 3
p a.index(“fruit”) #=> nil
搜索多維數組
a = [[“apple”,100],[“vine”,500],[“orange”,300]]

p a.assoc(“apple”) #=> [“apple”, 100]
p a.assoc(“orange”) #=> [“orange”, 300]
p a.assoc(“pear”) #=> nil
創建新數組
使用array#map 或者array#collect方法

a = [10, 20, 30, 40, 50]
p a.collect {|x| x*10} #=> [100, 200, 300, 400, 500]
p a #=> [10, 20, 30, 40, 50]

p a.map {|x| x*10} #=> [100, 200, 300, 400, 500]
p a #=> [10, 20, 30, 40, 50]

a.collect! {|x| x/10} #=> [1, 2, 3, 4, 5]
p a #=> [1, 2, 3, 4, 5]

a = [[“vine”, 2, 500], [“orange”, 3, 100], [“apple”, 10, 50]]
p a.map {|x| [x[0], x[1]*x[2]]} #=> [[“vine”, 1000], [“orange”, 300], [“apple”, 500]]
迭代數組中各個元素
[“Taro”, “Hanako”, “Ichiro”].each {|x| puts “Hello, #{x}”}

=> “Hello, Taro”

=> “Hello, Hanako”

=> “Hello, Ichiro”

sum = 0
[1,2,3,4,5,6,7,8,9,10].each {|x| sum += x}
p sum #=> 55
還可以使用Array#reverse_each方法反轉元素迭代

隨機提取數組元素

if RUBY_VERSION < ‘1.9.0’
class Array
def choice
at( rand( size ) )
end
end
end
[1, 2, 3].choice #=> 3
[1, 2, 3].choice #=> 1

用%w方式你可以把用分割符號包含的;用空格隔開的不同字符串定義爲一個數組:
words = %w[this is a test] # 等同於: [‘this’, ‘is’, ‘a’, ‘test’]
open = %w| ( [ { < | # 等同於: [‘(‘, ‘[‘, ‘{‘, ‘<’]
white = %W(\s \t \r \n) # 等同於: [“\s”, “\t”, “\r”, “\n”]

用%w或%W定義數組的方式類似於用%q和%Q定義字符串,分界符號的規則也一樣,在分界符號中的元素無需分號(”,“”)包含,無需逗號分隔,不同元素之間用空格隔開。
你還可以通過Array.new 來定義數組,這種方式可以讓你通過程序化的手段還初始化數組:

ruby 數組操作

數組刪除所有重複的空元素
數組轉爲字符串,並用’,’分割

   ss = ['a' , 'b', '' ,'' ,'c']; 

   ss.uniq!.reject!{|x| x  == ''}
   ss.join!(',')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章