Mảng trong Ruby
Mảng là danh sách chứa các giá trị theo một thứ tự nào đó (ví dụ như cam, quít, mít, dừa .v.v.). Mỗi phần tử trong mảng có vai trò như một biến: bạn có thể biết một phần tử đang trỏ đến đối tượng nào, và bạn cũng có thể bắt nó trỏ đến một đối tượng khác. Bạn có thể tạo mảng bằng cách dùng dấu ngoặc vuông ( [ ] ), và cách sử dụng mảng được minh họa trong ví dụ dưới đây (p018arrays.rb).
# Arrays
# Empty array
var1 = []
#Array index starts from 0
puts var1[0]
# an array holding a single number
var2 = [5]
puts var2[0]
#an array holding two strings
var3 = ['Hello','Goodbye']
puts var3[0]
puts var3[1]
flavour = 'mango'
# an array whose elements are pointing
# to three objects:
# a float, a string and an array
var4 = [80.5, flavour, [true,false]]
puts var4[2]
# a trailing comma is ignored
name = ['Satish', 'Talim', 'Ruby', 'Java',]
puts name[0]
puts name[1]
puts name[2]
puts name[3]
# the next one outputs nil
# nil is Ruby's way of saying nothing
puts name[4]
# we can add more elements too
name[4] = 'Pune'
puts name[4]
# we can add anything!
name[5] = 4.33
puts name[5]
# we can add an array to an array
name[6] = [1, 2, 3]
puts name[6]
# some methods on arrays
newarr = [45, 23, 1, 90]
puts newarr.sort
puts newarr.length
# method each (iterator) - extracts each element into languages
languages = ['Pune', 'Mumbai', 'Bangalore']
languages.each do |lang|
puts 'I love ' + lang + '!'
puts 'Don\'t you?'
end
# delete an entry in the middle and shift the remaining entries
languages.delete('Mumbai')
languages.each do |lang|
puts 'I love '+ lang + '!'
puts 'Don\'t you?'
end
Phương thức each cho phép ta tác động đến mỗi đối tượng mà mảng trỏ tới. Trong ví dụ trên, ta đã duyệt qua các phần tử của mảng mà không cần dùng biến đếm.
Sau đây là một vài điều cần nhớ:
* Biến nằm giữa hai dấu | trỏ tới phần tử mà phương thức each đang duyệt qua trong mảng. Bạn có thể đặt tên cho biến này là gì cũng được, nhưng nên đặt tên dễ nhớ.
* Khối mã do và end khai báo một khối các lệnh tác động tới mỗi phần tử của mảng. Khi viết chương trình Ruby ta sẽ sử dụng khối mã kiểu này rất nhiều, và chi tiết sẽ được nói đến sau.
Sau đây là một ví dụ, trong đó phương thức trả lại giá trị mảng (p019mtdarry.rb)
def mtdarry
10.times do |num|
square = num * num
return num, square if num > 5
end
end
num, square = mtdarry
puts num
puts square
Kết quả sẽ là:
>ruby p019mtdarry.rb 6 36 >Exit code: 0
Phương thức times của lớp Integer (số nguyên) sẽ duyệt qua khối mã đi sau nó một số lần, và truyền vào khối mã tham số là giá trị từ 0 đến số lần – 1 . Như ta thấy nếu bạn đặt sau return nhiều giá trị, phương thức sẽ trả lại các giá trị đó dưới dạng mảng. Bạn có thể dùng phép gán song song để lấy giá trị của các phần tử mảng này.
Xem tài liệu hướng dẫn về mảng
Bài tập nhỏ
1. Viết một chương trình Ruby (p020arraysum.rb), trong đó khai báo biến mảng chứa một số giá trị số nhất định (ví dụ collection = [1, 2, 3, 4, 5]). Tính tổng các giá trị này.
2. Viết một chương trình Ruby (p021oddeven.rb), trong đó với mỗi giá trị của một mảng cho sẵn (ví dụ collection = [12, 23, 456, 123, 4579]. Chương trình sẽ duyệt qua các số và cho kết quả số đó là số chẵn hay số lẻ.
