Những Điều Bạn Chưa Biết Về So Sánh Chuỗi Trong Ruby

Trung Quân

Chuỗi là kiểu dữ liệu được sử dụng rất phổ biến trong lập trình. Bài viết này sẽ tổng hợp những cách so sánh chuỗi trong Ruby. Mỗi cách sẽ kèm theo các ví dụ minh hoạ và được chạy sử dụng chương trình interactive ruby hay irb.

So sánh chuỗi trong Ruby

So Sánh Sử Dụng Toán Tử ==

Toán tử == so sánh sự giống nhau giữa hai chuỗi trả về giá trị true nếu 2 chuỗi giống nhau và false trong trường hợp ngược lại.

Ví dụ 1:

> "Ruby" == "Rails"
=> false

Ví dụ 2:

> "Ruby" == "Ruby"
=> true

Ví dụ 3:

"Ruby" == "ruby"
=> false

Sử Dụng Method eql?

Method eql? thực hiện việc so sánh hai chuỗi tương tự như toán tử ==.

Ví dụ 4:

> "Ruby".eql? "Rails"
=> false

Ví dụ 5:

> "Ruby".eql? "Ruby"
=> true

Ví dụ 6:

> "Ruby".eql? "ruby"
=> false

Sử Dụng Toán Tử ===

Đối với so sánh chuỗi thì toán tử này không có gì khác biệt so với ==:

Ví dụ 7:

> "Ruby" === "Rails"
=> false

Ví dụ 8:

> "Ruby" === "Ruby"
=> true

Ví dụ 9:

> "Ruby" === "ruby"
=> false

Sử Dụng Method equals?

Method equals so sánh object ID của hai chuỗi và chỉ trả về true khi hai chuỗi có cùng object ID hay nói cách khác hai chuỗi thuộc cùng một object.

Ví dụ 10:

> "Ruby".equal? "Ruby"
=> false

Câu lệnh trên trả về false vì mỗi chuỗi mới được tạo ra trong Ruby là một object riêng biệt. Để làm rõ điều này bạn chạy câu lệnh sau:

"Ruby".object_id
=> 70240461573740

Và chạy lại một lần nữa bạn sẽ thấy giá trị trả về của object_id lúc này sẽ khác.

"Ruby".object_id
=> 70240461544980

Điều này bởi vì mỗi lần sử dụng chuỗi Ruby Ruby đã tạo ra một object. Để tái sử dụng chuỗi mà không tạo object mới chúng ta sẽ gán giá trị của chuỗi cho biến. Ví dụ:

> a = "Ruby"
> b = "Ruby"

Lúc này khi bạn chạy câu lệnh:

a.object_id
=> 70240474020400 

Hoặc:

b.object_id
=> 70240470400540

Thì kết quả trả về sẽ không thay đổi với mỗi biến ab.

Sử Dụng Method casecmp

Tương tự như ==, method casecmp của đối tượng chuỗi dùng để so sánh sự giống nhau của hai chuỗi nhưng không quan tâm tới ký tự in hoa hay in thường. Method casecmp trả về 0 nếu 2 chuỗi là giống nhau với điều kiện không tính đến in hoa hay in thường của ký tự trong mỗi chuỗi:

"CodeHub.vn".casecmp "codehub.vn"
=> 0

Thêm Phản Hồi

Bài Viết Liên Quan