Die Dokumentation Array#[]= stellt fest, dassExpand Array mit bevorzugtem Standard
Wenn Indizes sind größer als die aktuelle Kapazität des Arrays, die Array automatisch wachsen.
Wenn es wächst automatisch, tut sie dies mit nil
Werte:
arr = []
arr[2] = "!"
arr # => [nil, nil, "!"]
Ist es möglich, zu bestimmen, was der Standard für die ersten beiden Werte?
Derzeit bin ich tun
arr = []
index = 2
currently_uninitialized_value_range = (arr.length)...(index)
default_values = currently_uninitialized_value_range.map{ "" }
arr[currently_uninitialized_value_range] = default_values
arr[index] = "!"
arr # => ["", "", "!"]
die ein wenig ausführlich ist.
Ich benutze ein Array, anstatt einen Hash, weil sie die Werte darstellen, die ich in eine Tabelle eingeben werde, und die Bibliothek, die ich verwende (Axlsx), zieht es vor, Daten in der Zeile hinzuzufügen nach Reihe.
'arr = Array.new (2, '') # => [" "," "]; arr [2] = "!"; arr => ["", "", "!"] '. Zumindest wenn Sie nur die ersten n Elemente initialisieren wollen. – BernardK
@BernardK 'Array.new (2), {''}' ist sicherer als 'Array.new (2, '')'. Siehe "common gotchas" im rdoc für [Array.new] (http://www.ruby-doc.org/core-1.9.3/Array.html#method-c-new). –