简体   繁体   English

如何使用ruby中的sort_by按字母顺序对数组进行排序?

[英]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 成员资格belongs_to:group
  • Group has_many :memberships 集团has_many:会员资格

@memberships is equal to: @memberships等于:

[
  {
  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! 注意:这确实有效 - > @ memberships.sort_by! { |m| {| m | m.group.id } m.group.id}

It will order the array based on the group.id so maybe it has something to do with sorting alphabetically? 它将基于group.id对数组进行排序,所以它可能与按字母顺序排序有关吗?

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. 我按group.name进行排序,但是一些组名是大写的,有些是较低的,这就是把它全部抛弃了。 Converting everything to downcase worked well. 将所有内容转换为downcase运行良好。

@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 我无法使用m.group.name访问数组中的哈希值

Here's a working syntax 这是一个有效的语法

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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