尝试创建一个方法skip_animals
,该方法采用animals
数组和skip
整数,并返回除第一个skip
个项目之外的所有元素的数组。
输入:skip_animals(['leopard', 'bear', 'fox', 'wolf'], 2)
预期输出:["2:fox", "3:wolf"]
def skip_animals(animals, skip)
arr = Array.new
animals.each_with_index{|animal, index| arr.push("#{animal}:#{index}") }
puts arr.drop(skip)
end
而是在单独的一行上输出puts
,而不是将它们添加到数组arr
。我认为arr.push
会正确添加它们。如何将元素添加到数组中?
我想使用这些方法,而不是map
或更先进的方法。我需要修改这个each_with_index
行,而不是彻底检查它。
(这是对Hackerrank的挑战,所以它使用STDIN和STDOUT)
修改
以下是我使用p
代替puts
的更新代码。它给了我两个不同数组的奇怪输出,不知道为什么。
def skip_animals(animals, skip)
arr = Array.new
animals.each_with_index{|animal, index| arr.push("#{index}:#{animal}") }
p arr.drop(skip)
end
这给了我两行输出:
["3:panda", "4:tiger", "5:deer"]
["0:leopard", "1:bear", "2:fox", "3:wolf", "4:dog", "5:cat"]
我假设顶部是正确的数组,但我不明白为什么第二个也是打印,或者为什么它有一组不同的动物。
答案 0 :(得分:1)
irb(main):001:0> puts ['1', '2']
1
2
=> nil
irb(main):002:0> p ['1', '2']
["1", "2"]
根据the documentation,puts
:
顺便说一句,我会像这样编码(使用将给定对象写入ios,与IO#print一样。写一条记录 在任何尚未结束的分隔符之后的分隔符(通常是换行符) 换行序列。 如果使用数组参数调用,则写入每个参数 新行上的元素。如果不带参数调用,则输出单个元素 记录分隔符。
Enumerable#map
+返回结果而不是在函数内打印):
def skip_animals(animals, skip)
animals.drop(skip).each_with_index.map { |animal, index|
("#{index + skip}:#{animal}")
}
end
p skip_animals(['leopard', 'bear', 'fox', 'wolf'], 2)
答案 1 :(得分:0)
只需从此行puts
puts arr.drop(skip)
def skip_animals(animals, skip)
arr = Array.new
animals.each_with_index{|animal, index| arr.push("#{animal}:#{index}") }
arr.drop(skip)
end