创建一个填充数组的Ruby方法

时间:2014-08-18 20:52:56

标签: ruby arrays methods

我正在创建一个填充数组的方法,并接受1.一个所需的值和一个可选的字符串/整数值。 Desired_size反映了数组中所需的元素数量。如果将字符串/整数作为第二个值传入,则此值用于使用额外元素填充数组。我知道有一个' fill'可以快速解决这个问题的方法 - 但这会欺骗我正在做的家庭作业。

问题:无论我做什么,只返回原始数组。我从这里开始:

class Array
  def pad(desired_size, value = nil)

    desired_size >= self.length ? return self : (desired_size - self.length).times.do { |x| self << value }

  end
end

test_array = [1, 2, 3]
test_array.pad(5)

从我研究过的问题似乎是试图改变自己的数组,所以我学会了.inject并给了它一个旋转:

class Array
  def pad(desired_size, value = nil)

    if desired_size >= self.length
      return self 
    else 
      (desired_size - self.length).times.inject { |array, x| array << value }
    return array
    end
  end
end
test_array = [1, 2, 3]
test_array.pad(5)

互联网告诉我问题可能是任何对自我的提及所​​以我完全消除了这一点:

class Array
  def pad(desired_size, value = nil)
    array = []
    self.each { |x| array << x }
    if desired_size >= array.length
      return array 
    else 
      (desired_size - array.length).times.inject { |array, x| array << value }
    return array
    end
  end
end
test_array = [1, 2, 3]
test_array.pad(5)

我对课程很新,并且仍在努力学习它们。也许我甚至没有用test_array以正确的方式测试它们?否则,我认为问题是我得到了识别传入的desired_size值的方法。我不知道下一步该去哪里。任何意见,将不胜感激。

提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

在所有3次尝试中,如果desired_size大于原始数组大小,则返回原始数组。你倒退了。换句话说,你只是返回而不是填充。

你的第一次尝试很接近。你需要: 1)修复您的条件检查。 2)修改self数组是可以的,因此不需要更复杂的尝试。 3)无论你做什么,都要确保你自我回归。

通过修改self,您不仅可以返回修改后的数组,还可以更改变量test_array所拥有的数组。所以,如果你这样做:

test_array = [1, 2, 3]
puts test_array.pad(5, 4).inspect  // prints [1, 2, 3, 4, 4]
puts test_array                    // prints [1, 2, 3, 4, 4]

在Ruby中,当一个函数修改self时,函数名以!结尾,所以如果你要写它修改self,最好将它命名为pad!

如果你想写它不会修改自我,你可以从:

开始
array = self.dup

然后在array上完成所有操作。

相关问题