Tôi đã nhìn thấy rất nhiều câu hỏi về điều này nhưng chỉ với một khóa, không bao giờ cho nhiều khóa.Ruby xóa các mục trùng lặp trong mảng băm nhưng dựa trên nhiều hơn một giá trị
Tôi có mảng sau băm:
a = [{:name=>"Yes, Yes, Yes", :artist=>"Some Dude", :composer=> 'First Dude', :duration=>"3:21"},
{:name=>"Chick on the Side", :artist=>"Another Dude", :duration=>"3:20"},
{:name=>"Luv Is", :duration=>"3:13"},
{:name=>"Yes, Yes, Yes", :artist=>"Some Dude", :composer=> 'First Dude', :duration=>"2"},
{:name=>"Chick on the Side", :artist=>"Another Dude"}]
a.uniq
sẽ không làm việc ở đây vì thời gian là khác nhau hoặc có thể thậm chí không tồn tại. Tôi có một khóa duy nhất được thiết lập trong cơ sở dữ liệu không cho phép các mục trùng lặp bằng cùng tên, nghệ sĩ và nhà soạn nhạc vì vậy đôi khi tôi gặp lỗi khi mọi người có mục nhập trùng lặp cho 3 khóa này.
Có cách nào để chạy uniq
có thể kiểm tra 3 khóa đó không? Tôi đã thử một khối như thế này:
new_tracks.uniq do |a_track|
a_track[:name]
a_track[:artist]
a_track[:composer]
end
Nhưng mà bỏ qua bất cứ điều gì mà quan trọng là không có mặt (bất kỳ mục mà không có một nhà soạn nhạc không đáp ứng được các tiêu chí trên ví dụ).
Tôi luôn có thể chỉ sử dụng khóa :name
nhưng điều đó có nghĩa là tôi sẽ loại bỏ các bản nhạc có khả năng hợp lệ trong cùng một tập hợp có cùng tên nhưng nghệ sĩ hoặc nhà soạn nhạc khác nhau.
Điều này là với Ruby 2.0.
Tuyệt vời, ** cảm ơn rất nhiều! ** Điều đầu tiên hoạt động tốt: '.uniq {| track | [track [: name], track [: artist], theo dõi [: composer]]. tham gia (":")} '. Cái thứ hai cho tôi một lỗi 'SyntaxError: unexpected '}', mong đợi ']''. Nếu tôi sửa lỗi đó, tôi sẽ nhận được 'phương thức undefined' attributes''. Nhưng cái đầu tiên thực hiện thủ thuật. Cảm ơn một lần nữa. – kakubei
Tôi đã sửa lỗi cú pháp. –
Tôi vẫn nhận được 'phương thức không xác định' thuộc tính '' cho dòng đó ... – kakubei