Dokumentacja dla Array#[]= zauważa, że Rozwiń tablicę z preferowanym domyślnie
Jeśli indeksy są większe niż obecnie pojemności tablicy, tablica rośnie automatycznie.
Kiedy nie rosną automatycznie, robi to z nil
wartości:
arr = []
arr[2] = "!"
arr # => [nil, nil, "!"]
Czy to możliwe, aby określić, co domyślnie jest dla tych dwóch pierwszych wartości?
Obecnie robię
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 # => ["", "", "!"]
który jest trochę rozwlekły.
Używam tablicy, a nie hash, ponieważ reprezentują one wartości, które zamierzam wprowadzić do arkusza kalkulacyjnego, a biblioteka, z której korzystam (Axlsx) woli mieć dodany wiersz danych według rzędów.
'arr = Array.new (2, '') # => [" "," "]; arr [2] = "!"; arr => ["", "", "!"] '. Przynajmniej jeśli chcesz zainicjować tylko pierwsze n elementów. – BernardK
@BernardK 'Array.new (2), {''}' jest bezpieczniejsze niż 'Array.new (2, '')'. Zobacz "typowe błędy" w dokumencie rdoc dla [Array.new] (http://www.ruby-doc.org/core-1.9.3/Array.html#method-c-new). –