迭代n到Ruby可枚举的最后一项

时间:2013-07-02 21:28:34

标签: ruby

我正在尝试找到一种最简洁的方法来为数组中的第一项做一些特殊的事情,然后为所有其他事情做一些不同的事情。到目前为止,我有这样的事情:

puts @model.children.first.full_name
@model.children[1..@model.children.count].each do |child|
  puts child.short_name
end

我不喜欢如何指定范围内的计数。我想找一个更短的方法来指定“从第二项到最后一项”。怎么办呢?

5 个答案:

答案 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 )