Ruby - сортировка по массиву хэшей - PullRequest
0 голосов
/ 05 июня 2018

У меня есть этот массив хэшей:

@fournisseurs = [
{ id: 10592,
  nom: 'Carrossier Procolor Armand-Paris (Garage Michel Tondreau)',
  distance: '3.9 km',
  dispos: nil
},
{ id: 10463,
  nom: 'Carrossier Procolor Grand Beauport(Garage Michel Tondreau)',
  distance: '3.8 km',
  dispos: nil
}, 
{ id: 10594,
  nom: 'Honda Charlesbourg',
  distance: '5.2 km',
  dispos: nil
}, 
{ id: 10508,
  nom: 'Carrossier ProColor Charlesbourg',
  distance: '15.5 km',
  dispos: nil
}]

И я бы хотел отсортировать его по расстоянию.Я попытался @fournisseurs.sort_by! { |fournisseur| fournisseur[:distance]}, но он не сортирует мой массив хэшей.Я читал, что sort_by! был нестабилен.Как я могу это сделать?

Заранее спасибо!

1 Ответ

0 голосов
/ 05 июня 2018

Предполагая, что каждое расстояние задано в виде строки, вам необходимо преобразовать его в число с плавающей точкой для эффективной сортировки по расстоянию.

@fournisseurs = [
{ id: 10592,
  nom: 'Carrossier Procolor Armand-Paris (Garage Michel Tondreau)',
  distance: '3.9 km',
  dispos: nil
},
{ id: 10463,
  nom: 'Carrossier Procolor Grand Beauport(Garage Michel Tondreau)',
  distance: '3.8 km',
  dispos: nil
}, 
{ id: 10594,
  nom: 'Honda Charlesbourg',
  distance: '5.2 km',
  dispos: nil
}, 
{ id: 10508,
  nom: 'Carrossier ProColor Charlesbourg',
  distance: '15.5 km',
  dispos: nil
}]


@fournisseurs.sort_by! { |f| f[:distance].to_f}


puts @fournisseurs.inspect
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...