我一直在尝试使用Rails学习所包含的方法,并遇到似乎应该有更好/更清晰的方法来完成相同任务的情况,但我不确定如何改进。
我最近遇到的一个如下,其中我将一组哈希作为参数传入。如果数组少于5个元素,那么我初始化元素直到总共5个元素。
def do_stuff(numbers)
raise "Maximum of 5 numbers can be defined in numbers array." if numbers.count > 5
blank_range = (numbers.count-1)..5
if blank_range.count > 0
blank_range.each do |i|
numbers[i] = {"entry" = " "}
end
end
end
这是我想要的一个非常基本的例子,虽然这是我发现自己使用了几次的模式。有没有办法内置这个?
答案 0 :(得分:1)
我认为方法#fill
就是您所需要的。它需要三个参数 - 一个附加到数组的对象和一个用该对象填充的范围。
numbers.fill({ 'entry' => ' ' }, numbers.size...5)
因此{ 'entry' => '' }
是您的对象,numbers.size
是起始位置,5
是结束位置。
如果numbers.size
为5则不会填写任何内容。
答案 1 :(得分:0)
Array
类的Ruby文档将是一个很好的起点。在那里,您将找到构造和操作数组的不同方法。
例如,构造一个包含3个单空格字符串的数组:
[" "] * 3 => [" ", " ", " "]
Array.new(3, " ") => [" ", " ", " "]
然后,您可以使用+
来连接像Array.new(3, " ") + numbers
这样的数组。
Array类包含Enumeration
,Range
也包含inject
。从其他东西构造数组时,(1..3).inject(numbers) { |numbers, i| numbers.unshift(" ") }
可能很有用。
像3.times { numbers.unshift(" ") }
或者{{1}}