So scheint dieses Verhaltenunintuitive Verhalten von array.map
> array = (1..4).to_a
=> [1, 2, 3, 4]
> array.map {|a| [array.delete(array.first), array.delete(array.last)]}
=> [[1, 4], [2, 3]]
> array
=> []
Aber dann logisch zu sein, wenn wir die Reichweite erhöhen funktioniert es nicht:
> array = (1..6).to_a
=> [1, 2, 3, 4, 5, 6]
> array.map {|a| [array.delete(array.first), array.delete(array.last)]}
=> [[1, 6], [2, 5]]
> array
=> [3, 4]
Und es macht das gleiche seltsame Verhalten mit ungeraden Nummern:
> array = (1..9).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
> array.map {|a| [array.delete(array.first), array.delete(array.last)]}
=> [[1, 9], [2, 8], [3, 7]]
> array
=> [4, 5, 6]
Das war nicht was wir erwartet haben, warum verhält es sich so?
Was erwarten Sie in den letzten zwei? Es wird allgemein als eine schlechte Idee angesehen, über etwas zu iterieren und es gleichzeitig zu modifizieren, es führt zu einem seltsamen und verwirrenden Verhalten, wenn man nicht sehr vorsichtig ist. –