Với uniq
bạn có thể xóa TẤT CẢ các phần tử trùng lặp khỏi một mảng.
Hãy xem nó hoạt động như thế nào!
Nếu bạn có một mảng như thế này :
n = [1,1,1,2,3,4,5]
Trong đó số 1
được sao chép.
Gọi uniq
trên mảng này loại bỏ những cái thừa và trả về một mảng MỚI với các số duy nhất.
Ví dụ :
n.uniq # [1,2,3,4,5]
Lưu ý rằng uniq
sẽ không thay đổi n
(mảng ban đầu), vì vậy chúng ta cần gọi uniq!
hoặc để lưu mảng mới.
Ví dụ :
unique_numbers = n.uniq
Khá dễ dàng, phải không?
Nhưng nhiều người không biết rằng uniq
lấy một khối.
Với một khối, bạn có thể làm được nhiều điều hơn nâng cao những thứ.
Hãy để tôi giải thích…
Cách sử dụng phương pháp Ruby Uniq với khối A
Khi bạn gọi uniq
, nó hoạt động bằng cách tạo ra một hàm băm từ các phần tử mảng của bạn.
Mọi phần tử đều trở thành một khóa trong hàm băm.
Bởi vì các khóa băm là duy nhất, chúng tôi có thể nhận được danh sách tất cả các khóa trong băm, danh sách này sau đó trở thành mảng mới của chúng tôi với các phần tử duy nhất.
Bây giờ :
Nếu bạn muốn thay đổi những gì tạo nên một cái gì đó độc đáo, bạn có thể vượt qua một khối.
Đây là một ví dụ :
fruits = %w(orange apple banana)
“Orange” và “Banana” có cùng độ dài là 6 ký tự.
Nếu chúng tôi sử dụng uniq
như thế này :
fruits.uniq(&:size) # ["orange", "apple"]
Sau đó, chúng tôi bỏ "chuối" vì nó sẽ là một bản sao khi chúng tôi so sánh các chuỗi theo kích thước của chúng.
Một ví dụ khác :
objects = [1, 2, "a", "b", :c, :d] objects.uniq(&:class)
Điều này giúp bạn có được một mảng với các đối tượng duy nhất theo lớp:
[1, "a", :c]
Bạn có thấy sức mạnh của điều này không?
Khi bạn chuyển một khối tới uniq
, bạn có thể xác định chính xác theo những quy tắc nào được coi là duy nhất.
Cách sử dụng Uniq với nhiều điều kiện
Bạn có thể sử dụng nhiều điều kiện!
Đây là cách thực hiện :
Giả sử bạn có User
lớp, với:
-
age
-
name
-
country
Bạn chỉ muốn một người cho mỗi quốc gia có cùng độ tuổi.
Dễ dàng với một khối :
[david, petter, raphael].uniq { |person| [person.age, person.country] }
Với mã này, cả hai điều kiện phải khớp nhau trước khi điều gì đó có thể được coi là duy nhất.
Tính năng này hoạt động như thế nào?
Nếu không có khối, đối tượng sẽ trở thành khóa băm.
Với một khối, giá trị thu được sẽ trở thành khóa băm và đối tượng trở thành giá trị băm.
Sau đó…
Ruby nhận các giá trị và trả về chúng dưới dạng một mảng mới.
Đây chỉ là chi tiết triển khai, nhưng tôi thấy chúng rất thú vị nên tôi nghĩ tôi sẽ chia sẻ chúng với bạn.
Tóm tắt
Bạn đã học về uniq
phương thức trong Ruby! Chính xác cách sử dụng nó, tại sao nó hữu ích và nó hoạt động như thế nào.
Bây giờ hãy thực hành với phương pháp này để bạn có thể ghi nhớ nó.
Cảm ơn vì đã đọc!