a1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
a2 = [2..4, 8..11, 16..17]
Entfernen einer Wertebereich entfernen aus einem Array like this getan werden kann:mehrere Wertebereiche von Array
[1, 2, 3, 4, 5, 6, 7, 8, 9].slice!(2..5)
Iterieren über die Bereiche und das gleiche gilt wie oben (a2.each { |range| a1.slice!(range) }
) ist nicht perfekt obwohl. Die Bereiche überschneiden sich manchmal und zerstören somit den Referenzierungsindex für die anderen Bereiche.
Also, irgendwelche Vorschläge, wie die Bereiche in a2
von a1
auf die effizienteste Weise zu entfernen? a1
ist normalerweise [* 0..10080] lang. a2
hat etwa 30 Bereiche, die jeweils Hunderte von Werten enthalten.
Ich stelle mir vor, wenn die Bereiche in sortierter Reihenfolge sind, könnten Sie das Array umkehren und beginnen, von der Rückseite aus zu arbeiten? –
Heh! :) Ich habe gerade über diese Möglichkeit nachgedacht, aber dann habe ich gemerkt, dass sich die Bereiche manchmal überschneiden. Es ist also immer noch keine gute Lösung. Siehe Aktualisierung. –