2013-01-01 29 views
19

Tôi vừa mới bắt đầu học ruby. Tôi có một mảng băm. Tôi muốn để có thể sắp xếp các mảng dựa trên một elementin băm. Tôi nghĩ tôi có thể sử dụng phương thức sort_by. Ai đó có thể giúp tôi không?phương pháp ruby ​​sort_by

#array of hashes 
array = [] 
hash1 = {:name => "john", :age => 23} 
hash2 = {:name => "tom", :age => 45} 
hash3 = {:name => "adam", :age => 3} 
array.push(hash1, hash2, hash3) 
puts(array) 

Đây là mã sort_by tôi:

# sort by name 
array.sort_by do |item| 
    item[:name] 
end 
puts(array) 

Không có gì xảy ra với mảng. Không có lỗi nào.

Trả lời

37

Bạn cần phải lưu trữ các kết quả:

res = array.sort_by do |item| 
    item[:name] 
end 
puts res 

Hoặc sửa đổi các mảng chính:

array.sort_by! do |item| #note the exclamation mark 
    item[:name] 
end 
puts array 
+0

Cảm ơn bạn. Tôi cũng tìm ra điều tương tự. Thấy một ví dụ sort_by khác. Vì vậy, sort_by không làm tại chỗ. –

+5

Phương pháp Bang (Kết thúc bằng!) Sửa đổi tại chỗ, nhưng thực hành tốt là không sử dụng chúng và tạo đối tượng mới dưới dạng phiên bản sửa đổi của các phiên bản cũ. Các lỗi tinh vi có thể được đưa vào các chương trình của bạn bằng cách cho phép các phương thức biến đổi các đối tượng của bạn. – quandrum

+0

Cảm ơn bạn đã thấu hiểu. –

Các vấn đề liên quan