2010-03-27 16 views
5

Grüße!Einem Array zuweisen und aufgetauchte Nullwerte

Wie kann ich die nil s durch 0 ersetzen, wenn ich einem Array einen Wert wie folgt zuweise?

array = [1,2,3] 
array[10] = 2 
array # => [1, 2, 3, nil, nil, nil, nil, nil, nil, nil, 2] 

Wenn beim Zuweisen nicht möglich, wie würde ich danach den besten Weg machen? Ich dachte an array.map { |e| e.nil? ? 0 : e }, aber gut ...

Danke!

+0

Da ich keine falschen Werte bekommen kann, scheint die Option 'map' ausreichend zu sein. Und ja, der unordentliche ist wirklich chaotisch. :) Danke für Ihre Hilfe! – Tobias

Antwort

5

Es gibt keine eingebaute Funktion, nil in einem Array zu ersetzen, also ja, map ist der Weg zu gehen. Wenn eine kürzere Version würden Sie glücklicher machen, könnten Sie tun:

array.map {|e| e ? e : 0} 
1

Um das Array anstelle zu ändern

array.map!{|x|x ?x:0} 

Wenn das Array enthalten false Sie benötigen diese stattdessen

verwenden
array.map!{|x|x.nil? ? 0:x} 
12

Um die Anordnung nach der Zuordnung zu ändern:

array.map! { |x| x || 0 } 

Beachten Sie, dass dies auch false in 0 konvertiert.

Wenn Sie Nullen verwenden während Zuordnung wollen, ist es ein wenig chaotisch:

i = 10 
a = [1, 2, 3] 
a += ([0] * (i - a.size)) << 2 
# => [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 2] 
0

Ein anderer Ansatz wäre eine eigene Funktion zu definieren, um einen Wert zu dem Array hinzufügen.

class Array 
    def addpad(index,newval) 
    concat(Array.new(index-size,0)) if index > size 
    self[index] = newval 
    end 
end 

a = [1,2,3] 
a.addpad(10,2) 
a => [1,2,3,0,0,0,0,0,0,0,2] 
1
a.select { |i| i } 

Diese Antwort ist zu kurz, so bin ich noch ein paar Worte hinzufügen.

+1

Sie können a.compact für diese Funktion verwenden, was Sie tun – sachin

1

nil.to_i ist 0, wenn alle Zahlen ganze Zahlen sind, dann sollte unten funktionieren. Ich denke es ist auch die kürzeste Antwort hier.

array.map!(&:to_i) 
Verwandte Themen