Подтвердить что ты не робот

Как сортировать массив в алфавитном порядке с помощью sort_by в ruby?

У меня есть набор членов. В каждом членстве есть группа. Мне нужно отсортировать этот массив членства по имени группы. Я пробовал кучу разных способов, и последний способ:

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

Однако это имя не сортируется по имени. Кажется, это случайная сортировка массива.

  • Членство принадлежит _to: group
  • Группа has_many: членства

@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
   }
}
]

ПРИМЕЧАНИЕ. Это работает → @memberships.sort_by! {| m | m.group.id}

Он будет упорядочивать массив на основе group.id, так что, возможно, он имеет какое-то отношение к сортировке в алфавитном порядке?

Любая помощь будет высоко оценена.

4b9b3361

Ответ 1

Ничего себе, после долгой борьбы с этим я понял, что моя проблема была простой. Я сортировал по group.name, но некоторые из названий групп были прописными, а некоторые были ниже, что отбрасывало все. Преобразование всего в нижнее положение работало хорошо.

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

Ответ 2

Является ли метод сортировки опцией?

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

Ответ 3

Я не вижу, как работает ваш код. Я не могу получить доступ к хэшам в массивах, используя m.group.name

Здесь рабочий синтаксис

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