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

Thành thạo Ruby Sets: Ví dụ thực tế, Toán tử và Phương thức

Ruby Set là gì?

Set là class lưu item như array…

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

Thêm vào đó:

Tất cả item trong set được bảo đảm unique.

Trong tutorial Ruby này bạn học:

  • Cách & khi nào dùng set cho lợi ích tối đa
  • Khác biệt set và array!
  • Danh sách method set hữu ích

Bắt đầu!

Ví dụ Ruby Set

Set là class Ruby giúp tạo danh sách item unique.

Ví dụ hữu ích:

Giả sử duyệt danh sách sản phẩm lớn.

Nhưng có entry trùng lặp và bạn chỉ muốn unique product.

Bạn cho vào set, set đảm bảo list luôn unique không tốn công thêm.

Cách làm:

require 'set'
products = Set.new
products << 1
products << 1
products << 2
products # Set: {1, 2} 

Lợi ích khác: tìm kiếm list này rất nhanh:

products.include?(1) # true 

Nhanh vì search constant time.

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

Bạn có thể thắc mắc…

Khác biệt set và array?

Set không truy cập trực tiếp element:

products[0] # undefined method `[]' 

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

Nhưng set convert thành array bất kỳ lúc cần:

products.to_a # [1, 2] 

Cả ý dùng set là dùng hai thuộc tính đặc biệt:

  • Fast lookup (với include?)
  • Giá trị unique

Nếu cần này set cho performance boost tốt, và không phải gọi uniq trên array mỗi lần muốn unique element.

Set vs Array Benchmark

Benchmark cho thấy performance difference array và set include?.

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

Lý do khác biệt: array phải check TỪNG element!

Nếu array 1 triệu element, nó check 1 triệu lần mỗi include?.

Set không phải làm vậy.

Ruby Set Methods

Có số operation/method giữa set, nếu có background toán học bạn nhận ra.

Toán tử Union (Hợp)

Method set hữu ích là union operator:

products | (1..10) # Set: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 

Toán tử này combine tất cả unique element hai set thành một set.

Btw, này work với bất kỳ Enumerable object, như array, range, hash, không chỉ object class Set.

Toán tử Difference (Hiệu)

Muốn xóa element set này từ set kia thì này method.

Ví dụ:

products - (3..4) # Set: {1, 2, 5, 6, 7, 8, 9, 10}

Toán tử Intersection (Giao)

Và đây set intersection operator:

Set.new(1..3) & Set.new(2..5) # Set: {2, 3} 

Này cho element chung cả hai set.Thành thạo Ruby Sets: Ví dụ thực tế, Toán tử và Phương thức3 toán tử (union, difference, intersection) cũng dùng với array.

Superset & Subset

Superset là set chứa tất cả element set khác.

Bạn check set này superset của set kia.

Như sau:

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

Range 10..40 chứa 20..30 trong nó.

Subset là set tạo từ phần set khác:

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

Cách dùng Sorted Sets

Muốn set luôn sorted dùng class SortedSet.

Có yêu cầu dùng class này:

  1. Object thêm vào set phải implement <=> method.
  2. Object phải comparable với nhau (so sánh integer với integer, string với string)

Ví dụ:

sorted_numbers = SortedSet.new
sorted_numbers << 5
sorted_numbers << 2
sorted_numbers << 1
sorted_numbers # SortedSet: {1, 2, 5} 

Sets Video Tutorial

Tóm tắt

Bạn học dùng set Ruby cho performance tốt & coding dễ. Cũng học khác biệt array và set.

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

Cảm ơn đã đọc!