Computer >> Máy Tính >  >> Lập trình >> Ruby

Cách sử dụng phương pháp Ruby Select (Có ví dụ)

Bạn có thể sử dụng phương thức select trong Ruby để lọc một mảng các đối tượng.

Ví dụ: bạn có thể tìm thấy tất cả các số chẵn trong danh sách.

Không có select trông như thế này:

even_numbers = []

[1,2,3,4,5,6].each do |n|
  if n.even?
    even_numbers << n
  end
end

even_numbers

Đó là một đoạn mã khá đơn giản!

Hãy tìm hiểu cách sử dụng select .

Ví dụ về phương pháp chọn

Sử dụng lựa chọn yêu cầu một khối.

Bên trong khối, bạn phải trả về thứ gì đó đánh giá thành true hoặc falseselect sẽ sử dụng nó để lọc mảng của bạn.

Bạn có thể tìm hiểu về các giá trị boolean trong Ruby bằng cách đọc bài viết này.

Đây là một ví dụ :

[1,2,3,4,5,6].select { |n| n.even? }

Thao tác này sẽ thực hiện tương tự như ví dụ đầu tiên trong phần giới thiệu, nhưng với ít mã hơn nhiều.

Trên thực tế, chúng ta có thể giảm điều này nhiều hơn nữa.

Như thế này :

[1,2,3,4,5,6].select(&:even?)

Loại phím tắt này chỉ hoạt động khi bạn phải gọi một phương thức trực tiếp trên mọi phần tử của mảng.

Btw, bạn cũng có thể sử dụng select với hàm băm.

Ví dụ :

stock = {
  apples: 10,
  oranges: 5,
  bananas: 1
}

stock.select { |k, v| v > 1 }

# {:apples=>10, :oranges=>5}

Ở đâu k đại diện cho khóa &v đại diện cho các giá trị.

Tôi đang nói :

"Tìm cho tôi tất cả các loại trái cây có số lượng lớn hơn 1".

Kết hợp lựa chọn với các phương pháp khác

Bạn có thể kết hợp phương thức select với một phương thức Enumerable khác.

Đáng chú ý nhất là with_index .

Ví dụ :

fruits = %w(apple orange banana)

fruits.select.with_index { |word, idx| idx.even? }

# ["apple", "banana"]

Điều này cho phép bạn lọc bằng cách sử dụng chỉ mục, thay vì chính đối tượng (trong trường hợp này là một chuỗi).

Lọc mảng tại chỗ

Sử dụng select trên một mảng luôn tạo ra một mảng mới.

Thay vào đó, nếu bạn muốn thay đổi mảng ban đầu, bạn có thể sử dụng select! phương pháp.

Đây là cách thực hiện :

fruits = %w(apple orange banana)

fruits.select! { |fruit| fruit.start_with? "a" }

# ["apple"]

Các phương thức kết thúc bằng dấu chấm than (như select! ) sẽ thay đổi đối tượng thay vì trả về một đối tượng mới, nhưng quy tắc này không được thực thi bởi chính ngôn ngữ.

Đó chỉ là một quy ước giữa chúng ta.

Tìm so với Chọn

Lựa chọn là một lựa chọn tuyệt vời khi bạn muốn lọc danh sách và lấy một mảng với kết quả.

Nhưng nếu bạn chỉ muốn tìm một đối tượng thì sao?

Bạn có thể sử dụng find phương pháp.

Như thế này :

letters = %w(a aa aaa aaaa)

letters.find { |l| l.size == 3 }
# "aaa"

letters.find { |l| l.size == 10 }
# nil

Tìm kiếm cho bạn kết quả phù hợp đầu tiên hoặc nil nếu nó không thể được tìm thấy.

Hiểu phương pháp Tìm tất cả

Nếu bạn đang thắc mắc về find_all và cách nó liên quan đến find &select ...

Nó rất đơn giản!

  • find_all phương thức là bí danh cho select .
  • find phương pháp này giúp bạn tìm kiếm một đối tượng cụ thể thay vì nhiều đối tượng.

Ruby 2.6 thêm một bí danh khác cho select :

filter

Lựa chọn đối lập là gì?

Bạn có thể loại bỏ các yếu tố bạn không muốn thay vì chọn những yếu tố bạn muốn.

Thật dễ dàng với lựa chọn :

[1,2,3,4,5,6].select { |n| n != 4 }

Nhưng có một phương pháp giúp mọi thứ trở nên rõ ràng hơn.

Phương thức đó là reject .

Ví dụ :

[1,2,3,4,5,6].reject { |n| n == 4 }

Bạn không nhận được bất kỳ lợi thế kỹ thuật nào, về mặt hiệu suất hay mặt khác, nhưng nó sẽ làm cho mã của bạn tốt hơn.

Phương pháp chọn đường ray

Tôi không muốn bạn bối rối khi làm việc với các mô hình Rails và biết rằng bạn cũng có thể sử dụng select ở đó.

Bạn nên biết rằng ...

select này phương pháp khác nhau!

Ví dụ :

Fruit.select(:id, :name, :color)

Khi bạn sử dụng select với một ActiveRecord mô hình bạn đang yêu cầu cho các cột cụ thể từ cơ sở dữ liệu.

Theo như tôi hiểu, điều này chủ yếu được thực hiện vì lý do hiệu suất.

Một lưu ý cuối cùng về điều này :

Nếu bạn đang làm việc với một mảng thông thường bên trong ứng dụng Rails thì bạn đang sử dụng select phương pháp mà chúng tôi đã nói đến trong toàn bộ bài viết này.

Tóm tắt

Bạn đã học về select, một trong những phương pháp hữu ích nhất của Ruby để làm việc với các tập hợp các đối tượng như mảng, phạm vi và hàm băm.

Cách sử dụng phương pháp Ruby Select (Có ví dụ)

Bây giờ đến lượt bạn mở trình chỉnh sửa của bạn và sử dụng nó.

Cảm ơn vì đã đọc!