2017-09-11 8 views
1

Ich benutze Ruby 2.4. Wenn ich eine geordnete Anordnung von Zahlen haben, sagenWie finde ich Lücken in meinem Array?

[1, 2, 4, 7, 8, 9] 

Wie kann ich die numerischen Elemente finden, die in meinem Array nicht vorhanden sind, zwischen den kleinsten und größten Werte im Array? Zum Beispiel in den oben genannten, sind die fehlenden Werte

[3, 5, 6] 

Wenn mein Array

[2, 7] 

die fehlenden Werte wäre, würde ich suchen

[3, 4, 5, 6] 

Antwort

6

Entfernen Sie die vorhandenen Zahlen würden aus dem erwarteten Zahlenbereich:

(numbers.first..numbers.last).to_a - numbers 
2

Wenn Sie komplizierte Lösungen bevorzugen:

[1, 2, 4, 7, 8, 9].chunk_while { |a, b| a + 1 == b } 
        .each_cons(2) 
        .flat_map { |x, y| (x.last + 1).upto(y.first - 1).to_a } 
#=> [3, 5, 6] 
Verwandte Themen