简体   繁体   中英

How do you sort an array alphabetically using sort_by in ruby?

I have an array of memberships. In each membership is a group. I need to sort this array of memberships by the name of the group. I've tried a bunch of different ways, and the latest way is this:

@memberships.sort_by! { |m| m.group.name }

However, this doesn't sort by the name. It appears to be randomly sorting the array.

  • Membership belongs_to :group
  • Group has_many :memberships

@memberships is equal to:

[
  {
  id: 2141,
  user_id: 491,
  group_id: 271,
  member_type: "member",
    group: {
      id: 271,
      name: "Derek's",
      privacy: "open",
      bio_image_url: "/bio_images/medium/missing.png?1340285189",
      member_count: 1,
      upcoming_checkins_count: 0
    }
  },
  {
  id: 2201,
  user_id: 221,
  group_id: 291,
  member_type: "member",
    group: {
      id: 291,
      name: "Rounded Developement",
      privacy: "closed",
      bio_image_url: "/groups/medium/291/bioimage.jpg?1340736175",
      member_count: 7,
      upcoming_checkins_count: 0
   }
}
]

NOTE: This does work --> @memberships.sort_by! { |m| m.group.id }

It will order the array based on the group.id so maybe it has something to do with sorting alphabetically?

Any help would be much appreciated.

Wow, after struggling with this for an extremely long time, I realized my problem was a simple one. I was sorting by group.name but some of the group names were uppercase and some were lower, which was throwing it all off. Converting everything to downcase worked well.

@memberships.sort_by!{ |m| m.group.name.downcase }

排序方法是一种选择吗?

ary.sort{ |a,b| a[:group][:name] <=> b[:group][:name] }

I don't see how your code is working. I can't access the hashes in the arrays using m.group.name

Here's a working syntax

@memberships.sort_by!{ |m| m[:group][:name] }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM