ruby數組在執行個體應用中詳解

來源:互聯網
上載者:User

 數組

1.  建立數組:

  和其它很多程式設計語言一樣,很容易建立一個數組,但要注意的是Ruby是一種弱類型的指令碼語言,數組中各元素的類型可以互不相同,而且數組的長度可變:

 代碼如下 複製代碼

arr = [“one”,”two”,”three”]

OR

arr = Array.new                    #an empty array

arr = Array.new(5)               #[nil, nil, nil, nil, nil]

arr = Array.new(5,”hello”)    #[”hello”, ”hello”, ”hello”, ”hello”, ”hello”]

       當建立一個數組時,如果其元素為string類型且使用單引號,而你又不想老輸入單引號,那麼我們可以使用下面的方法來建立(使用%W來建立用雙引號括起來的字串):

 代碼如下 複製代碼

arr = %w( this is an array of strings)    #使用空格作為元素的分隔字元

 

2.通過索引存取數組的值:

在Ruby中,數組索引可以是正整數(從前到後,從0開始)也可以是負整數(從後到前,從-1開始)還可以是範圍(Range):

 代碼如下 複製代碼

arr = ['h','e','l','l','o',' ','w','o','r','l','d']

print arr[0,5]

puts

print arr[0..4]

puts

print arr[0...4]

puts

print arr[-5,5]

--------Results--------

hello

hello

hell

world

 

Note: arr[-5,5]:前一個整數-5表示開始的索引,後面一個整數5表示數量

 

3..複製數組:

當使用”=”將一個陣列變數賦值給另一個陣列變數時,這兩個陣列變數引用的仍然是同一個數組,修改其中一個數組的值,另一個也會修改。我們可以使用Clone方法複製一個新數組:

 代碼如下 複製代碼

arr = [‘one’,’two’,’three’,]

arr1= arr               #arr和arr1引用的還是同一個數組,修改一個另一個也會修改

arr2=arr.clone        #arr2是arr的一個新版本,修改arr2不影響arr

 

4..比較數組大小:

       當使用 <=> 來比較兩個數組a1和a2時,有三種情況:

1.       a1 小於 a2, 返回 -1

2.       a1 等於 a2, 返回 0

3.       a1 大於 a2, 返回 1

那麼,數組是如何比大小的呢?

當兩個數組進行比較時,會把兩個數組相同索引(從0開始)上的值拿來比較,如 [0,10,20]<=> [0,20,20], 則會返回-1,因為當索引為1時,10<20;

 

另外,如果比較的兩個數組的元素是字串,那麼就比較它們的ASCII;如果一個數組比另一個長且其它元素都相同,那麼數組長的‘大’。

然而,如果一個短數組裡面的一個元素比另一個長數組裡面的同位置的元素大,則認為短數組‘大’。

 

 代碼如下 複製代碼

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

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

arr3=[1,2,3,4]

arr4=[1,2,3,5]

arr5=[1000,2000,3000]

arr6=[1,2]

arr7=[2,1]

arr8=["hello", "world"]

arr9=["Hello", "World"]

 

p(arr1<=>arr2)      #     0

p(arr3<=>arr1)      #     -1

p(arr4<=>arr3)      #     1

p(arr5<=>arr4)      #     1

p(arr7<=>arr6)      #     1

p(arr8<=>arr7)      #     nil

p(arr9<=>arr8)     #     -1

 

5.數組排序:

Sort方法使用比較操作符 <=> 來比較一個數組中鄰近的元素的大小,但是這個不能比較一個數組中包含有nil的值的情況;

arr.sort{|a,b| a.to_s <=> b.to_s}

說明: 在這arr是一個數組對象,a和b代表相鄰的兩個元素。本方法使用了to_s方法把nil轉換為一個Null 字元串,這樣就可以對含有nil的數組進行排序了。此外,這個數組本身的值不會發生任何變在。

 

6.添加和刪除數組元素:

       向數組添加元素:

unshift:向數組頭部添加數組元素

push:   向數組頭部尾數組元素

<< : 向數組尾部添加一個數組元素

向數組刪除元素:

shift: 從頭部刪除數組元素,並返回被刪除的元素

pop: 從尾刪除數組元素,並返回被刪除的元素

ruby數組填充方法
12月17日 17:38作者:zool

手冊

 代碼如下 複製代碼

array.fill(obj) → array
array.fill(obj, start [, length]) → array
array.fill(obj, range ) → array
array.fill {|index| block } → array
array.fill(start [, length] ) {|index| block } → array
array.fill(range) {|index| block } → array

前三個方法都是將obj填充到array裡, start 預設為0, length預設為self.length長度

後三個方法是將block裡的傳回值填充到array裡。block接收到的是array的元素index值。

執行個體代碼

a = [ "a", "b", "c", "d" ]

a.fill("x")              #=> ["x", "x", "x", "x"]
#將數組裡所有元素替換為"x"

a.fill("z", 2, 2)        #=> ["x", "x", "z", "z"]
#從數組第[2]位元素開始,替換 2 次 "z"

a.fill("y", 0..1)        #=> ["y", "y", "z", "z"]
#將數組[0]到[1]位的元素替換為"y"

a.fill {|i| i*i}         #=> [0, 1, 4, 9]
#提供block方法, i為數組下標

a.fill(-2) {|i| i*i*i}   #=> ['a', 'b', 8, 27]
#從數組第[-2]位開始運行block
#注意,ruby源碼裡的注釋是錯的
#a.fill(-2) {|i| i*i*i}   #=> [0, 1, 8, 27]
   
#實際應用, 我要產生一個數字從1到50的數組 

 代碼如下 複製代碼
>>  Array.new(50).fill {|i| i+=1 }
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]

也許Ruby數組中最有力量的運算可以從數學操作符中找到答案-它們能夠從現在數組建立新的數組。例如,+操作符允許你由兩個數組的串連建立一個新數組,而*操作符允許你複製或串連一個數組自身若干次。shirt_information= [14.5,

 代碼如下 複製代碼
"Long", 32, 49.99]
pant_information=[34,32,59.99]
shirt_information + pant_information 結果為
[14.5, "Long", 32, 49.99, 34, 32, 59.99]結果為
[14.5, "Long", 32, 49.99,14.5, "Long", 32, 49.99]

結果為

 代碼如下 複製代碼

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.