Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建填充数组的Ruby方法_Ruby_Arrays_Methods - Fatal编程技术网

创建填充数组的Ruby方法

创建填充数组的Ruby方法,ruby,arrays,methods,Ruby,Arrays,Methods,我正在创建一个填充数组并接受1的方法。所需的值和2。可选的字符串/整数值。所需大小反映数组中所需的元素数。如果传入一个字符串/整数作为第二个值,则该值用于用额外的元素填充数组。我知道有一种“填充”方法可以简化这一过程,但那将是对我正在做的作业的欺骗 问题:无论我做什么,都只返回原始数组。我从这里开始: class Array def pad(desired_size, value = nil) desired_size >= self.length ? return self

我正在创建一个填充数组并接受1的方法。所需的值和2。可选的字符串/整数值。所需大小反映数组中所需的元素数。如果传入一个字符串/整数作为第二个值,则该值用于用额外的元素填充数组。我知道有一种“填充”方法可以简化这一过程,但那将是对我正在做的作业的欺骗

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

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)
类数组
def垫(所需尺寸,值=零)

所需大小>=自身长度?return self:(desired_size-self.length).times.do{| x | self在所有3次尝试中,如果desired_size大于原始数组大小,则返回原始数组。这是向后的。换句话说,只返回而不是填充

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

通过修改self,不仅可以返回修改后的数组,还可以更改变量
test\u 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!

如果要编写它,使其不会修改self,可以从以下内容开始:

array = self.dup

然后在
数组上执行所有操作

您第一次尝试的
pad
方法实际上运行不正常,出现了错误。如果您将此作为pad方法,它会工作(我将其压缩在一起,通过添加空格和删除分号使其更可读)。
(所需大小-self.length)。次{self-self.length;return-self
。由于这只是一个小的错误修复,我评论。您考虑过使用.map或.map吗?后者应该在self中修改,我认为…ruby类字符串有一个方法来替换它自己,称为replace()。不确定类数组是否也有类似的内容,我担心它可能没有。但听起来肯定是这样。map在这里会很有用!提示:如果
所需的_大小
大于或小于当前大小,是否要填充?@DaniëlKnippers您的代码工作得很好,但我不确定如何修复我的原始大小为了让它和你的一样好用。我试图将它转换成if/else,但没有骰子……约格:我本来是想填充所需的_大小是否超过原始数组的长度。我认为我的代码有点正确-但我是非常新的,可能遗漏了一些明显的东西。非常感谢你们两位迄今为止的帮助!@CJJohnson其中一件事是;有不需要
else
。考虑一下。1.您总是想返回数组实例
self
。2.您只想在
required\u size
大于
self.length
时执行某项操作。这就是我更改的内容;检查
required\u size>self.length
以及在这种情况下的pad内容。否则我们没有要执行任何操作,除了返回
self
,就像我们在其他情况下一样。由于它们共享
return self
,因此不应将其放在单独的
if/else
块中。
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]
array = self.dup