我正在尝试找到一种最简洁的方法来为数组中的第一项做一些特殊的事情,然后为所有其他事情做一些不同的事情。到目前为止,我有这样的事情:
puts @model.children.first.full_name
@model.children[1..@model.children.count].each do |child|
puts child.short_name
end
我不喜欢如何指定范围内的计数。我想找一个更短的方法来指定“从第二项到最后一项”。怎么办呢?
答案 0 :(得分:10)
Ruby使用splat运算符*
有一种很酷的方法。这是一个例子:
a = [1,2,3,4]
first, *rest = *a
puts first # 1
puts rest # [2,3,4]
puts a # [1,2,3,4]
以下是您重写的代码:
first, *rest = @model.children
puts first.full_name
rest.each do |child|
puts child.short_name
end
我希望这有帮助!
答案 1 :(得分:6)
你可以采用这种方法:
@model.children[1..-1].each do |child|
puts child.short_name
end
答案 2 :(得分:4)
您可以使用drop
:
puts @model.children.first.full_name
@model.children.drop(1).each do |child|
puts child.short_name
end
答案 3 :(得分:3)
这样的东西?:
puts @model.children.first.full_name
@model.children[1..-1].each do |child|
puts child.short_name
end
答案 4 :(得分:0)
您的标题表示您要省略n
个元素,但OP文本只要求特别处理第一个元素。如果您对更一般的nanswer感兴趣,这里有一个简洁的选项:
n = 1 # how many elements to omit
@model.children.drop( n ).map( &:short_name ).each &method( :puts )