Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Làm Chủ Mảng Ruby: Ví Dụ Thực Tế & Phương Thức Cần Thiết

Mảng (array) là gì?

Mảng là lớp built-in Ruby, giữ danh sách không hoặc nhiều mục, bao gồm phương thức giúp dễ dàng thêm, truy cập, lặp qua tất cả mục.

Hữu ích vì nếu không có mảng phải dùng nhiều biến.

Ví dụ:

a = 1
b = 2
c = 3

Thay vào đó, bạn làm:

numbers = [1, 2, 3]

Phần hay nhất?

Bạn cho bất cứ thứ gì vào mảng!

Như:

  • Số
  • Chuỗi
  • Mảng khác! (tạo mảng đa chiều)

Học thêm mảng để dùng tốt nhất!

Mục Lục

  • 1 Mảng Chỉ Số Từ Không (Zero-Indexed)
  • 2 Các Phương Thức Mảng Ruby
  • 3 Chuyển Mảng Thành Chuỗi
  • 4 Mảng Đa Chiều (2D Arrays & More)
  • 5 Cách Lặp Qua Mảng Ruby
  • 6 Chỉ Số Âm (Negative Indexing)
  • 7 Các Thao Tác Mảng Khác
  • 8 Thao Tác Với Nhiều Mảng
  • 9 Kết Luận
    • 9.1 Related

Mảng Chỉ Số Từ Không

Bạn truy cập phần tử bên trong mảng dùng chỉ số (index), bắt đầu từ 0.

Nếu mảng có từ "cat", "dog", "tiger" trông như:

Làm Chủ Mảng Ruby: Ví Dụ Thực Tế & Phương Thức Cần Thiết

Code đại diện dữ liệu hình:

["cat", "dog", "tiger"]

Bây giờ:

Bạn khám phá làm gì với mảng!

Các Phương Thức Mảng Ruby

Bắt đầu học cách tạo mảng.

Tạo mảng rỗng, thêm mục mới, hoặc tạo mảng có giá trị khởi tạo.

Khởi tạo mảng rỗng:

users = []

Khởi tạo mảng có dữ liệu:

users = ["john", "david", "peter"]

Nếu tạo mảng chỉ chuỗi…

Tránh gõ dấu nháy cho mỗi chuỗi bằng cách tạo mảng %w.

Ví dụ:

users = %w(john david peter)

Có mảng, truy cập phần tử chứa.

Cách làm:

users[0] # Phần tử đầu
users[1] # Phần tử hai
users[2] # Phần tử ba

Cũng dùng first và last:

users.first # Phần tử đầu
users.last  # Phần tử cuối

Cách thêm mục vào mảng:

# Cả hai hiệu quả giống nhau, << ưu tiên.
users.push "andrew"
users << "andrew"

Cách xóa phần tử:

last_user = users.pop # Xóa phần tử cuối và trả về nó
user.delete_at(0) # Xóa phần tử đầu

Còn shift & unshift, tương tự pop/push nhưng lấy/thêm đầu mảng.

users.unshift "robert" # Thêm phần tử đầu mảng
users.shift # Xóa phần tử đầu và trả về nó

Mảng có chứa hoặc include mục?

Kiểm tra giá trị tồn tại trong mảng Ruby:

numbers = [1,2,3]
numbers.include?(2) # true
numbers.include?(10) # false

Độ dài mảng? (Nói cách khác, bao nhiêu phần tử)

words = ["cat", "coconut", "bacon"]
words.size # 3

Cheatsheet nhỏ:

Thao tácPhương thức
khởi tạoArray.new, [], %w
đọc[0], first, last
thêmpush, <<, unshift
xóapop, delete_at, shift

Chuyển Mảng Thành Chuỗi

Chuyển mảng bất kỳ thành chuỗi dùng Array#join.

Ví dụ:

letters = %w(a b c d)
letters.join # "abcd"

Phương thức nhận 1 tham số tùy chọn định nghĩa separator giữa phần tử khi join.

letters = %w(a b c d)
letters.join(" ") # "a b c d"

Muốn ngược lại, chuỗi thành mảng, dùng split:

"a b c".split

Kết quả:

["a", "b", "c"]

Mảng Đa Chiều (2D Arrays & More)

Mảng có thể cấu thành từ mảng khác, gọi là mảng đa chiều.

Ví dụ 2d array:

users = [
  [1, 'Peter'],
  [2, 'Steven']
]

Truy cập phần tử đầu mảng con đầu:

users[0][0] # 1

Và phần tử hai mảng con đầu:

users[0][1] # 'Peter'

Trường hợp muốn chuyển mảng đa chiều thành mảng thường.

Làm bằng flatten:

users.flatten # [1, "Peter", 2, "Steven"]

Cách Lặp Qua Mảng Ruby

Có mảng, tốt biết enumerates nội dung in ra?

Tin tốt là làm được!

Ví dụ: In mảng dùng each

users.each { |item| puts item }

Cần làm việc cả giá trị và chỉ số dùng each_with_index:

users.each_with_index { |item, idx| puts "#{item} with index #{idx}" }

Lưu ý: Hầu hết thao tác lặp nhờ module Enumerable, mixed vào Array mặc định.

Ví dụ: Viết hoa mọi từ mảng dùng map.

users = users.map { |user| user.capitalize }
users = users.map(&:capitalize)

map không sửa mảng tại chỗ (in-place), chỉ trả mảng mới phần tử sửa, nên gán kết quả vào biến.

Có map! (có dấu chấm than) sửa mảng trực tiếp, nhưng phiên bản đơn giản hơn ưu tiên.

Điều khác muốn làm: tìm tất cả mục phù hợp tiêu chí.

Ví dụ: Tìm số lớn hơn 10:

numbers = [3, 7, 12, 2, 49]
numbers.select { |n| n > 10 } # => 12, 49

Chỉ Số Âm

Học truy cập phần tử mảng dùng indexing (hoặc first/last).

Nhưng chỉ số âm?

Nói dùng -1 làm index mảng.

Ruby làm: bắt đầu từ cuối mảng. -1 lấy mục cuối, -2 lấy gần cuối, v.v.

Ví dụ:

letters = ["a", "b", "c"]
letters[-1] # "c"
letters[-2] # "b"

Các Thao Tác Mảng Khác

Nhiều việc làm với mảng, như sắp xếp hoặc chọn ngẫu nhiên.

Dùng sort sắp xếp mảng, ổn nếu chỉ string/số. Nâng cao dùng sort_by.

numbers = numbers.sort

Loại bỏ phần tử trùng lặp, nếu thường làm này cân nhắc dùng Set.

numbers = [1, 3, 3, 5, 5]
numbers = numbers.uniq # => [1, 3, 5]

Lưu ý không thay đổi mảng vĩnh viễn. Hầu hết phương thức Ruby tạo mảng mới với thay đổi yêu cầu. Muốn lưu kết quả dùng biến hoặc ví dụ này, dùng uniq!.

Muốn chọn một phần tử ngẫu nhiên dùng sample:

numbers.sample

Có thể "slice" mảng, lấy phần thay vì toàn bộ.

Ví dụ: Lấy 3 phần tử đầu, không thay đổi mảng:

numbers.take(3)
numbers[0,3]

Làm slice nâng cao. Ví dụ lấy tất cả trừ phần tử đầu:

numbers[1..-1]

Chú ý khác nhau dùng dấu phẩy (0,3) & range (1..-1). Cái đầu nói "cho 3 phần tử bắt đầu index 0", cái sau "cho ký tự trong range này".

Lấy kích thước mảng:

numbers.size # 5

Kiểm tra mảng rỗng:

numbers.empty? # false

Loại bỏ giá trị nil:

numbers << nil # [1, 3, 3, 5, 5, nil]
numbers.compact # [1, 3, 3, 5, 5]

Thao Tác Với Nhiều Mảng

Có hai mảng muốn nối/ghép thành một làm như sau:

# Nhanh hơn, vì thay đổi mảng users
users.concat(new_users)
# Chậm hơn, vì tạo mảng mới
users += new_users

Cũng xóa phần tử từ mảng này, nơi users_to_delete cũng mảng:

users = users - users_to_delete

Cuối cùng, lấy phần tử xuất hiện cả hai mảng:

users & new_users

Kết Luận

Mảng Ruby rất hữu ích và sẽ là đồng minh mạnh mẽ bên bạn.

Hãy thực hành tạo mảng, thêm phần tử, truy cập bằng index, v.v. Cũng đọc về Hash Ruby, lớp quan trọng khác kết hợp mảng viết code thú vị hơn.

Thực hành tạo nên hoàn hảo!

Nếu thấy hữu ích chia sẻ bài & đăng ký bản tin dưới 🙂