2011-01-22 32 views
7

Tôi có một mảng hoặc các đối tượng khác nhau và tôi muốn nhóm theo đối tượng. Ví dụRuby group_by object?

=> [#<Graphic id: 3...">, #<Collection id: 1....">, #<Category id:...">, #<Volume id: 15...">] 
all.size 
=> 4 

tôi đã cố gắng

all.group_by(Object) 

nhưng điều đó không làm việc ... bất kỳ ý tưởng về cách groupby các đối tượng trong một mảng?

+0

Đối tượng của bạn là gì? – shingara

+0

trong câu hỏi của tôi ... tôi có 4 (Đồ họa, Bộ sưu tập, Danh mục, Tập) – Trace

+0

Bạn đang cố gắng nhóm tài sản nào? – Jimmy

Trả lời

17

Bạn đang muốn làm điều gì đó như thế này?

all.group_by(&:class) 

nào sẽ nhóm các đối tượng trong mảng theo tên lớp học của họ

EDIT bình luận

all.group_by(&:class).each do |key, group| 
    group.each{|item| puts item} 
end 

chính là yếu tố nhóm và obj là bộ sưu tập cho chìa khóa, vì vậy đây sẽ lặp thông qua mỗi nhóm trong nhóm và liệt kê các đối tượng trong nhóm đó

Ngoài ra, bạn cũng có thể sắp xếp trong các nhóm dễ dàng quá

all.group_by(&:class).each do |key, group| 
    group.sort_by(&:attribute).each{|item| puts item} 
end 
+0

có nhưng điều đó mang lại cho tôi một băm đặt hàng ... làm thế nào để tôi sử dụng nó trong giao diện. Tôi muốn hiển thị tất cả các bộ sưu tập đầu tiên sau đó tất cả các đồ họa và như vậy .... vì vậy về cơ bản tôi muốn sử dụng mảng này để nhóm theo các mô hình và sau đó lặp qua chúng nhưng làm thế nào để bạn lặp qua ... = > # Trace

+0

Tôi cập nhật câu trả lời để phản ánh ý định của mình, tôi nghĩ rằng – Jimmy

+0

cảm ơn Jimmy là một câu trả lời tuyệt vời ... bạn có biết cách nhóm chúng thành 4 mảng tất cả với các đối tượng thích hợp không ... ví dụ một mảng với @graphics và tiếp theo với @collections và cứ thế ... – Trace