Các tài liệu cho Array#[]= ghi chú rằngMở rộng mảng với mặc định ưu tiên
Nếu chỉ số lớn hơn công suất hiện tại của mảng, mảng phát triển tự động.
Khi nó phát triển tự động, nó làm như vậy với nil
giá trị:
arr = []
arr[2] = "!"
arr # => [nil, nil, "!"]
Có thể xác định những gì mặc định dành cho những hai giá trị đầu tiên?
Hiện nay, tôi đang làm
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 # => ["", "", "!"]
Đó là một chút dài dòng.
Tôi đang sử dụng mảng, thay vì băm, vì chúng đại diện cho các giá trị tôi sẽ nhập vào bảng tính và thư viện tôi đang sử dụng (Axlsx) muốn có hàng được thêm dữ liệu theo hàng.
'arr = Array.new (2, '') # => [" "," "]; arr [2] = "!"; arr => ["", "", "!"] '. Ít nhất nếu bạn chỉ muốn khởi tạo các phần tử n đầu tiên. – BernardK
@BernardK 'Array.new (2), {''}' an toàn hơn 'Array.new (2, '')'. Xem "gotchas phổ biến" trong rdoc cho [Array.new] (http://www.ruby-doc.org/core-1.9.3/Array.html#method-c-new). –