2016-06-03 11 views
0

Ich habe ein Array, das die Betriebsstunden für einen Speicher darstellt und gespeichert als:Schienen 4: GROUP_BY mit 2 Variablen

schedule = [ [[mon_open, 9], [mon_close, 5]], 
      [[tues_open, 11], [tues_close, 7]], 
      [[wed_open, 9], [wed_close, 5]], 
      [[thur_open,9], [thur_close, 5]], 
      [[fri_open, 11], [fri_close, 7]] ] 

In dieser Situation würde ich die Arrays Gruppe wie eine solche, dass in den obigen Beispiel [[mon_open, 9],[mon_close, 5]], [[wed_open, 9],[wed_close, 5]] und [[thur_open,9],[thur_close, 5]] würde zusammen ...

und Similary [[tues_open, 11],[tues_close, 7]] und [[fri_open, 11],[fri_close, 7]] würden zusammen gruppiert gruppiert werden.

Grundsätzlich möchte ich Tage der Woche mit den gleichen Öffnungs- und Schließzeiten gruppieren. Kann das einfach gemacht werden?

Antwort

1

Die Art und Weise Gruppe von Arbeiten ist Sie wählen, was Sie für die Schlüssel verwenden möchten, so zum Beispiel sollte so etwas tun, was Sie wollen.

hier der Block gibt nur eine Reihe der letzten Elemente in jeder der beiden Element-Arrays, die Sie aufgezählt haben (I umgewandelt die „mon_open“, etc zu Symbolen Sie Strings auch.

schedule = [ [[:mon_open, 9], [:mon_close, 5]], 
      [[:tues_open, 11], [:tues_close, 7]], 
      [[:wed_open, 9], [:wed_close, 5]], 
      [[:thur_open,9], [:thur_close, 5]], 
      [[:fri_open, 11], [:fri_close, 7]] ] 


grouped = schedule.group_by { |i| [i[0].last, i[1].last]} 
puts grouped 
verwenden könnte

was Sie bekommen, ist dies

{[9, 5]=>[[[:mon_open, 9], [:mon_close, 5]], [[:wed_open, 9], [:wed_close, 5]], [[:thur_open, 9], [:thur_close, 5]]], [11, 7]=>[[[:tues_open, 11], [:tues_close, 7]], [[:fri_open, 11], [:fri_close, 7]]]}