Cách sử dụng Array trong Ruby
Để tiếp tục những tìm hiểu về các kiểu dữ liệu trong ngôn ngữ lập trình Ruby thì hôm nay mình xin phép giới thiệu các bạn một kiểu dữ liệu khác là Array trong Ruby - hay còn gọi là mảng. Chúng ta sẽ học cách sử dụng Array, khởi tạo Array, cũng như những thao tác trên Array thông dụng nhất.
Đây cũng là một trong những kiểu dữ liệu phổ biến nhất, vì vậy bạn cần phải nắm vững để sau này áp dụng vào công việc lập trình của mình.
1. Array trong Ruby là gì?
Đồng hành với kiểu Hash thì Array cũng sẽ là 1 kiểu dữ liệu mà chúng ta sẽ gặp rất nhiều khi xử lý dữ liệu trong các dự án thực tế, vì 2 kiểu dữ này thường hay dùng để lưu trữ dữ liệu và truy vấn.
Kiểu Array sẽ có dạng như thế này
Bài viết này được đăng tại [free tuts .net]
["Quang", "Phu", "Thuy", "My", "Son"]
dữ liệu sẽ được đặt trong [...].
Một array thuộc class Array
["Quang", "Phu", "Thuy", "My", "Son"].class => Array
Array được sử dụng để lưu trữ nhiều dữ liệu với độ dài bao nhiều tùy thích, nghĩa là chúng ta muốn cho bao nhiều phần tử vào cũng được. Không giống như integer hay string, bên trong array lưu trữ được cả 2 kiểu dữ liệu này cùng lúc.
2. Tạo một Array như thế nào ?
Để khởi tạo một Array thì có khá nhiều cách, các đầu tiên là sử dụng từ khóa new.
array = Array.new
chúng ta có thể khởi tạo một Array với size cho trước bằng cách truyền vào một tham số là giá trị size
array = Array.new(10) => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil] array.length => 10
Ngoài sử dụng hàm length để kiểm tra độ dài chuỗi chúng ta cũng sẽ có hàm size với chức năng tương tư
array.size => 10
Chúng ta cũng có thể khai báo giá trị mặc định cho tất cả các phần tử trong mảng bằng cách truyền thêm 1 tham số nữa, tham số này đại diện cho giá trị mặc định trong mảng
array = Array.new(10, "phu") => ["phu", "phu", "phu", "phu", "phu", "phu", "phu", "phu", "phu", "phu"]
Ngoài sử dụng tử khóa new ra thì chúng ta có thể sử dụng [] để định nghĩa array
number = Array[] => [] number = Array[1,2,3,4] => [1, 2, 3, 4] number = Array.[](1, 2, 3, 4,5) => [1, 2, 3, 4, 5]
Tất nhiên là chúng ta cũng có thể khai báo một mảng với những phần tử cho trước
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday" , "Saturday", "Sunday"]
Ngoài cách khai báo mảng trực tiếp ra mình sẽ giới thiệu với các bạn một cú pháp mới khá phổ biến trong Ruby để khai báo mảng đó là %w{} bên trong đó là các single word.
days = %w{Monday Tuesday Wednesday Thursday Friday Saturday Sunday} # tương ứng với days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
Lưu ý: %w{} sẽ bỏ qua các dấu quotes và dấu phẩy
3. Truy cập vào các phần tử trong Array
Để có thể truy cập vào các phần tử trong mảng thì chúng ta sẽ truy cập bằng index, index sẽ được đánh từ 0 lần lượt từ trái qua phải
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday" , "Saturday", "Sunday"] => ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] days[0] => "Monday" days[1] => "Tuesday"
Khi chúng ta truy cập vào phần tử không tồn tại trong mảng thì kết quả sẽ trả về nil
days[11] => nil
Nếu muốn tìm giá trị của index của một phần tử trong mảng bạn dùng hàm index
days.index("Monday") => 0
Cũng như tìm phần tử mảng thì tìm index của mảng nếu không tồn tại kết quả cũng sẽ trả về nil
days.index("test")
=> nil
Để lấy phần tử mảng theo chiều ngược lại, tức là từ cuối đi lên (phải qua trái), thì chúng ta sẽ lấy lần lượt các chỉ số là -1, -2, -3 ...
days[-1] => "Sunday" days[-2] => "Saturday"
Ngoài cách thủ công trên là lấy theo chỉ số, thì Ruby cũng cung cấp cho chúng ta 2 phương thức để lấy phần tử đầu tiên và cuối cùng của mảng là first và last
days.first => "Monday" days.last => "Sunday"
4. Nested Array
Nested Array hay còn gọi là mảng lồng nhau, cho phép chúng ta định nghĩa một mảng trong mảng. Đây là một ví dụ về mảng lồng nhau
nested = [1, 2, 3, [4, 5, 6]] => [1, 2, 3, [4, 5, 6]]
Việc truy cập các phần tử mảng thì cũng không khác gì mảng bình thường, nhưng để truy cập vào các phần tử mảng trong mảng thì có chút lưu ý.
Như ở trên ví dụ kia mảng lồng bên trong có chỉ số index là 3, nếu muốn truy cập vào phần tử thứ 1 của mảng lồng đó các bạn làm như sau
nested[3][0] => 4
cũng tương tự với các phần tử còn lại.
5. Thêm mới phần tử mảng
Cách đơn giản nhất để thêm mới phần tử mảng là gọi đến index (chỉ số) phần tử tiếp theo trong mảng và gán cho nó giá trị
array = [1, 2, 3, 4] => [1, 2, 3, 4] array[4] = 5 => 5 puts array => [1, 2, 3, 4, 5]
Nếu như bạn gọi đến index đã tồn tại, nó sẽ thay đổi luôn giá trị của phần tử tại chỉ số đó
array[0] = 5 => 5 puts array => [5, 2, 3, 4]
Ngoài ra chúng ta cũng có thể sử dụng hàm có sẵn trong Ruby cung cấp để thêm mới phần tử vào vị trí cuối cùng của mảng bằng cách dùng hàm push
array = [1, 2, 3, 4] => [1, 2, 3, 4] array.push(5) => [1, 2, 3, 4, 5] puts array => [1, 2, 3, 4, 5]
Nhanh hơn nữa chúng ta có cú pháp riêng dành cho mảng đó là << cũng để thêm mới phần tử mảng
array = [1, 2, 3, 4] => [1, 2, 3, 4] array << 5 => [1, 2, 3, 4, 5] puts array => [1, 2, 3, 4, 5]
6. Xóa phần tử mảng
Cũng giống với thêm mới phần tử, Ruby cũng cung cấp cho chúng ta phương thức để xóa luôn phần tử mảng.
Để xóa phần tử đầu tiên chúng ta có thể dùng hàm shift
array = [1, 2, 3, 4] => [1, 2, 3, 4] array.shift => 1 puts array => [2, 3, 4]
Để xóa phần tử cuối cùng có sẵn phương thức pop
array = [1, 2, 3, 4] => [1, 2, 3, 4] array.pop => 4 puts array => [1, 2, 3]
Hoặc là để xóa phần tử với giá trị đã biết chúng ta sử dụng hàm delete
array = [1, 2, 3, 4] => [1, 2, 3, 4] array.delete(1) => 1 puts array => [2, 3, 4]
Nếu muốn xóa phần tử mảng với index đã biết sử dụng hàm delete_at. Giả sử chúng ta muốn xóa phần tử mảng với index là 2.
array = [1, 2, 3, 4] => [1, 2, 3, 4] array.delete_at(2) => 3 púts array => [1, 2, 4]
7. Kết luận
Trên đây là những khái niêm để chúng ta có thể làm việc được với Array trong Ruby. Đây là kiểu dữ liệu rất hay gặp để xử lý dữ liệu trong thực tế, vì vậy các bạn hãy cố gắng nắm thật kĩ những khái niệm trên để làm việc với kiểu dữ liệu này.