Tôi có một mảng băm, và tôi muốn các giá trị duy nhất của nó. Gọi số Array.uniq
không cho tôi những gì tôi mong đợi.Làm thế nào để có được các yếu tố độc đáo từ một mảng băm trong Ruby?
a = [{:a => 1},{:a => 2}, {:a => 1}]
a.uniq # => [{:a => 1}, {:a => 2}, {:a => 1}]
đâu tôi mong đợi:
[{:a => 1}, {:a => 2}]
Trong việc tìm kiếm xung quanh trên mạng, tôi không đưa ra một giải pháp mà tôi đang hài lòng với. Folks đã đề xuất xác định lại Hash.eql?
và Hash.hash
, vì đó là những gì Array.uniq
đang truy vấn.
Chỉnh sửa: Nơi tôi gặp phải điều này trong thế giới thực, các băm hơi phức tạp hơn một chút. Chúng là kết quả của JSON được phân tích cú pháp có nhiều trường, một số trong đó các giá trị là băm. Tôi đã có một loạt các kết quả mà tôi muốn lọc ra các giá trị duy nhất.
Tôi không thích định nghĩa lại các giải pháp Hash.eql?
và Hash.hash
, vì tôi sẽ phải xác định lại Hash
trên toàn cầu hoặc xác định lại nó cho mỗi mục nhập trong mảng của tôi. Thay đổi định nghĩa của Hash
cho mỗi mục nhập sẽ rất cồng kềnh, đặc biệt là vì có thể có băm lồng nhau bên trong mỗi mục nhập.
Thay đổi Hash
trên toàn cầu có một số tiềm năng, đặc biệt nếu nó được thực hiện tạm thời. Tôi muốn xây dựng một lớp hoặc chức năng trợ giúp khác bao bọc việc lưu các định nghĩa cũ và khôi phục chúng, nhưng tôi nghĩ điều này làm tăng thêm sự phức tạp hơn là thực sự cần thiết.
Sử dụng inject
có vẻ như là một lựa chọn tốt để xác định lại Hash
.
nhiều hơn tôi nghĩ hơn một liên kết tôi đăng trên – edthix