Array sort_by Boolean

Array sort_by Boolean - Ruby/Rails - Programmation

Marsh Posté le 30-10-2013 à 11:56:51    

Salut,
 
j'essaye de trier une liste d'objets avec une méthode sur ces objets qui renvoit true ou false

Code :
  1. $a = []
  2. def add(msg, fast=false)
  3.   msg[:fast] = fast
  4.   $a << msg
  5.   $a.sort_by! { |m| m[:fast] ? 0 : 1 }
  6. end
  7. add({:test => "1"})
  8. add({:test => "2"})
  9. add({:test => "3"}, true)


ce qui donne:

[{:test=>"3", :fast=>true}, {:test=>"2", :fast=>false}, {:test=>"1", :fast=>false}]


et je cherche à obtenir:

[{:test=>"3", :fast=>true}, {:test=>"1", :fast=>false}, {:test=>"2", :fast=>false}]

Une idée? sans devoir créer une seconde liste.

Reply

Marsh Posté le 30-10-2013 à 11:56:51   

Reply

Marsh Posté le 06-11-2013 à 14:56:47    


Il y a une vraie raison pour cette limitation?

 

Sans, il suffit de faire un partition sur :fast puis de regrouper des deux morceaux.

 

Avec, le tri de Ruby ne donnant pas de garanties de stabilité (et étant effectivement non stable) ta seule possibilité c'est de stocker les index de chaque objet dans un coin et de trier sur (:fast, index) pour stabiliser les records ayant le même :fast.

 

Accessoirement, retrier ton array à chaque addition me semble aussi inefficace que possible. Je pense que tu ferais mieux de trouver l'index où tu veux insérer ton élément, puis tu l'insères en place.


Message édité par masklinn le 06-11-2013 à 15:03:50

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed