Mảng trong Ruby

Mảng là một danh sách các phần tử, khai báo mảng dùng ký hiệu [] rồi liệt kê bên trong nó giá trị các phần tử, mỗi phần tử cách nhau bởi dấu ,

# mảng các số
numbers = [1,3,5,7]

# mảng tên
names = ["Nam", "Minh", "Long", "Viet"]

Mỗi phần tử trong mảng có một chỉ số, phần tử đầu tiên chỉ số là 0, để truy cập (đọc/gán) một phần tử dùng kỹ hiệu [chỉ-số]

names = ["Hùng", "Hà", "Dân"]
puts names[2]                       # Đọc phần tử chỉ số 2 của mảng names
names[2] = "Nguyễn Văn Dân"         # Gán phần tử thứ hai một giá trị mới
puts names[2]                       # Đọc phần tử chỉ số 2 của mảng names
# In ra:
# Dân
# Nguyễn Văn Dân

Trong Ruby có thể dùng chỉ số âm, -1 là phần tử cuối của mảng, -2 là trước phần tử cuối ...

Kiểu phần tử trong mảng, thêm bớt phần tử mảng

  • Các phần tử trong mảng có thể có kiểu dữ liệu bất kỳ, phần tử này một kiểu phần tử kia có thể là kiểu khác.
    mang=[1, 1.2, "Abc"]
  • Để thêm phần tử mới vào mảng, nối vào cuối dùng toán tử <<
    mang << 10  # thêm một phần tử cuối, có giá trị 10

    Có thể thay toán tử << bằng phương thức push

    mang.push(10) # thêm một phần tử cuối, có giá trị 10
  • Để chèn phần tử vào vị trí có index cụ thể dùng phương thức insert
    mang.insert(0,100) # chèn vào vị trí đầu tiên phần tử có giá trị 100
  • Để xóa phần tử cuối dùng phương thức pop, xóa một phần tử ở index cụ thể dùng phương thức delete_at
    arr = [1,2,"A", "B"]
    a = arr.pop                 # xóa phần tử cuối, đồng thời lưu lại vào a
    b = arr.delete_at(1)        # xóa phần tử chỉ số 1, đồng thời lưu lại vào b
    puts arr
    

Lấy ra nhiều phần tử mảng

Có thể dùng dải dữ liệu mô tả chỉ số để trích xuất ra mảng con có các phần tử tương ứng với chỉ số đó

arr = [1,3,5,7,9,11]
subarr = arr[1..4]
puts subarr.inspect

# In ra
# [3, 5, 7, 9]

Kết hợp mảng

Có thể kết hợp hai mảng thành một mảng

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

c = a + b
print c.inspect
# [1, 2, 3, 4, 4, 5]

Có thể thực hiện phép hiệu hai tập hợp

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

c = a - b                   # c gồm các phần tử thuộc a nhưng không thuộc b, a - b là khác b - a
puts c.inspect
# [1, 2, 3]

Có thể tạo mảng mới bằng cách copy số phần nhiều lần với phép *

a = [1,2,3]
puts (a * 3).inspect
# [1, 2, 3, 1, 2, 3, 1, 2, 3]

Phép toán giao hai mảng &

Toán tử & lấy giao hai mảng, các phần tử có cả ở hai mảng

a = [2, 3, 7, 8]
b = [2, 7, 9]

print a & b
# [2, 7]

Phép toán hợp hai mảng |

Toán tử | lấy hợp của hai mảng, gồm tất cả các phần tử có trong hai mảng, các phần tử trùng nhau giữ lại 1

a = [2, 3, 7, 8]
b = [2, 7, 9]

print a | b
# [2, 3, 7, 8, 9]

Đảo thứ tự mảng

Có thể tạo ra mảng mới mà các phần tử có chỉ số đảo ngược so với mảng gốc bằng phương thức reverse

arr = [1, 2, 3]
puts arr.reverse.inspect
# [3,2,1]

Có thể dùng phương thức reverse! để đảo ngược bản thân mảng gốc

Các phương thức trong mảng

Phương thức Diễn giải
array.length Trả về số lượng phần tử trong mảng
array.sort Trả về mảng mới có sắp xếp
array.uniq Trả về mảng mới các phần tử trùng nhau giữ lại một
array.uniq! Phần tử trùng nhau giữ lại một
array.freeze Ngăn cản sửa đổi mảng
array.include?(obj) Trả về true nếu có phần tử với giá trị obj
array.max Trả về phần tử lớn nhất
array.min Trả về phần tử nhỏ nhất

Duyệt các phần tử mảng

Duyệt qua các phần tử mảng bằng lệnh for

arr = [3,5,6,78]
for x in arr
  puts "Giá trị: #{x}"
end

Duyệt qua các phần tử bằng phương thức each

a = [ "a", "b", "c" ]
a.each {
    |x|                 # định nghĩa biến lưu phần tử mảng khi duyệt qua
    print x, " -- "
}

Duyệt qua mỗi phần tử của mảng và thực hiện khối lệnh {} cho mỗi phần tử mảng đó, giá trị phần tử mảng lưu ở biến định nghĩa trong ký hiệu |biến| xuất hiện đầu khối.

Duyệt qua các chỉ số phần tử bằng phương thức each_index

a = [ "a", "b", "c" ]
a.each_index {
    |index|
    puts "phần tử #{index} có giá trị #{a[index]}"
}

# phần tử 0 có giá trị a
# phần tử 1 có giá trị b
# phần tử 2 có giá trị c

Mảng nhiều chiều - mảng trong mảng

Mỗi phần tử trong mảng có thể là đối tượng bất kỳ, có nghĩa là có thể là một mảng con. Bảng cách khai báo mảng chứa các phần tử cũng là mảng sẽ hình thành lên mảng nhiều chiều.

Ví dụ mảng trong mảng

a = [[1,2,3], [4,5,6]]
puts a[1][2]                # Truy vấn vào mảng con thứ hai, lấy phần tử thứ ba của mảng con này
# 6

Đăng ký nhận bài viết mới