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

Bộ Ruby - Ví dụ, Toán tử &Phương thức

Bộ Ruby là gì?

Tập hợp là một lớp lưu trữ các mục giống như một mảng…

Nhưng với một số thuộc tính đặc biệt làm cho nó nhanh hơn 10 lần trong các tình huống cụ thể!

Trên hết:

Tất cả các mặt hàng trong một bộ đều được đảm bảo là duy nhất .

Trong hướng dẫn Ruby này, bạn sẽ học:

  • Cách và thời điểm sử dụng một bộ vì lợi ích tối đa của bạn
  • Sự khác biệt giữa tập hợp và mảng!
  • Danh sách các phương pháp tập hợp hữu ích

Hãy bắt đầu!

Ví dụ về bộ Ruby

Tập hợp là một lớp Ruby giúp bạn tạo danh sách các mục duy nhất .

Dưới đây là một ví dụ về cách điều này hữu ích:

Giả sử bạn đang xem qua một danh sách lớn các sản phẩm.

Nhưng có các mục nhập trùng lặp trong danh sách này &bạn chỉ muốn các sản phẩm duy nhất.

Bạn có thể đặt chúng thành một bộ và bộ đó sẽ đảm bảo danh sách sản phẩm của bạn luôn là duy nhất mà không cần thêm bất kỳ công việc nào .

Đây là cách thực hiện điều đó:

require 'set'

products = Set.new

products << 1
products << 1
products << 2

products
# Set: {1, 2}

Một lợi ích khác là việc tìm kiếm danh sách này sẽ rất nhanh :

products.include?(1)

# true

Điều này quá nhanh vì tìm kiếm được thực hiện trong thời gian liên tục.

Set vs Array - Hiểu sự khác biệt

Bây giờ bạn có thể tự hỏi…

Sự khác biệt giữa một tập hợp và một mảng là gì?

Một tập hợp không có quyền truy cập trực tiếp vào các phần tử:

products[0]

# undefined method `[]'

Đó là sự khác biệt chính.

Nhưng một tập hợp có thể được chuyển đổi thành một mảng bất cứ lúc nào bạn cần:

products.to_a

# [1, 2]

Toàn bộ điểm của việc sử dụng một tập hợp là sử dụng hai thuộc tính đặc biệt của nó:

  • Thời gian tra cứu nhanh (với include? )
  • Giá trị duy nhất

Nếu bạn cần những thứ này thì một bộ sẽ giúp bạn tăng hiệu suất tốt và bạn sẽ không phải gọi uniq trên mảng của bạn mỗi khi bạn muốn các phần tử duy nhất.

Đặt so với Điểm chuẩn mảng

Dưới đây là điểm chuẩn để cho bạn thấy sự khác biệt về hiệu suất giữa mảng &tập hợp include? phương pháp.

# Ruby 2.5.0

set   include: 8381985.2 i/s
array include: 703305.5  i/s - 11.92x  slower

Lý do cho sự khác biệt này là một mảng phải kiểm tra mọi phần tử!

Nếu bạn có một mảng 1 triệu phần tử, nó sẽ kiểm tra 1 triệu phần tử mỗi khi bạn gọi include? .

Một bộ không nhất thiết phải làm điều đó.

Phương thức bộ Ruby

Có một số phép toán hoặc phương pháp có thể được thực hiện giữa các tập hợp, nếu bạn có kiến ​​thức về toán học, bạn có thể nhận ra chúng.

Người điều hành Liên minh

Một trong những phương pháp tập hợp hữu ích là toán tử liên hợp:

sản phẩm
products | (1..10)

# Set: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

Toán tử này cho phép bạn kết hợp tất cả các phần tử duy nhất của hai tập hợp thành một tập hợp.

Btw, điều này hoạt động với bất kỳ đối tượng Enumerable nào, như mảng, phạm vi &hàm băm, không chỉ các đối tượng từ Set lớp học.

Toán tử Sự khác biệt

Nếu bạn muốn xóa các phần tử của một tập hợp này khỏi tập hợp kia thì đây là phương pháp của bạn.

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

products - (3..4)

# Set: {1, 2, 5, 6, 7, 8, 9, 10}

Người điều hành giao lộ

Và đây là bộ người điều hành nút giao thông:

Set.new(1..3) & Set.new(2..5)

# Set: {2, 3}

Điều này cung cấp cho bạn các yếu tố chung trong cả hai tập hợp. Bộ Ruby - Ví dụ, Toán tử &Phương thức 3 toán tử này (liên hợp, chênh lệch &giao nhau) cũng có thể được sử dụng với mảng.

Superset &Subset

Tập hợp siêu đẳng là tập hợp chứa tất cả các phần tử của tập hợp khác .

Bạn có thể kiểm tra xem một tập hợp này có phải là tập hợp thay thế của tập hợp khác hay không.

Như thế này :

Set.new(10..40) >= Set.new(20..30)

Phạm vi 10..40 chứa 20..30 bên trong nó.

Một tập hợp con là một tập hợp được tạo ra từ các phần của một tập hợp khác:

Set.new(25..27) <= Set.new(20..30)

Cách sử dụng các bộ được sắp xếp

Nếu bạn muốn một tập hợp luôn được sắp xếp bạn có thể sử dụng SortedSet lớp học.

Có một số yêu cầu để sử dụng lớp này:

  1. Các đối tượng bạn đang thêm vào tập hợp phải triển khai phương thức <=>.
  2. Các đối tượng phải được so sánh với nhau (so sánh số nguyên với số nguyên hoặc chuỗi với chuỗi)

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

sorted_numbers = SortedSet.new

sorted_numbers << 5
sorted_numbers << 2
sorted_numbers << 1

sorted_numbers
# SortedSet: {1, 2, 5}

Đặt hướng dẫn bằng video

Tóm tắt

Bạn đã học cách sử dụng các bộ trong Ruby để có hiệu suất tốt hơn và viết mã dễ dàng hơn. Bạn cũng đã tìm hiểu về sự khác biệt giữa mảng và tập hợp.

Hãy chia sẻ bài viết này nếu bạn thấy nó hữu ích để nhiều người có thể tìm thấy nó 🙂

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