首页 > 解决方案 > 如何在Ruby中用零初始化一个未确定大小的数组?

问题描述

我有一个接收可变大小数组的方法(它可以是任何大小),我需要在数组中的任何位置添加一个计数器。

这是带有 IRB 的示例代码

 ▶▶ irb
2.5.5 :001 > arr = Array.new(0)
 => [] 
2.5.5 :002 > max = rand(1..99)
 => 95 
2.5.5 :003 > count = rand(1..max)
 => 11 
2.5.5 :004 > arr[count] += 1
Traceback (most recent call last):
        2: from /home/elorat/.rvm/rubies/ruby-2.5.5/bin/irb:11:in `<main>'
        1: from (irb):4
NoMethodError (undefined method `+' for nil:NilClass)
2.5.5 :005 >

标签: ruby

解决方案


我认为你有 71% 的机会要求这个:

def increment_and_extend_if_necessary(arr, idx)
  arr.fill(0, arr.size..idx)      
  arr[idx] += 1
end

arr = []

increment_and_extend_if_necessary(arr, 3)
arr #=> [0, 0, 0, 1] 

increment_and_extend_if_necessary(arr, 1)
arr #=> [0, 1, 0, 1] 

increment_and_extend_if_necessary(arr, 5)
arr #=> [0, 1, 0, 1, 0, 1] 

increment_and_extend_if_necessary(arr, 3)
arr #=> [0, 1, 0, 2, 0, 1] 

请参阅Array#fill


推荐阅读