2010-10-01 69 views

回答

8
for f in @a 
    puts f 
end 

我们可以写

puts @a.join("\n") 

在一般情况下,当你想要用几个数组做一些事情,你可以把数组放到一个数组中,然后使用each例如

[@a, @b].each do |list| 
    list.each { |value| puts value } 
end 

,一旦你在做的事情不仅仅是打印出来是有意义的使用方法提取重构你正在执行例如操作的值更复杂

[@a, @b].each do |list| 
    do_something_with list 
end 

最后,如果你需要保持描述性标签( “全部为” 等),您可以使用哈希:

{'As' => @a, 'Bs' => @b}.each_pair do |label, values| 
    puts "All #{label}" 
    puts values.join("\n") 
end 
+0

但它使用更多的内存。 – Hongli 2010-10-01 12:06:25

+0

有没有办法让@a和@b至少有一个小标签/标签?问题在第二部分回答!谢谢! – poseid 2010-10-01 12:13:44

+0

红利的评论发布之前我扩大了多个建议的答案。为了清楚起见,他指的是使用'join',它将构建一个包含所有值的新字符串。 – mikej 2010-10-01 12:18:26

0

只是猜...

def overview 
    puts "All As:" 
    puts_a(@a) 
    puts "\n" 

    puts "All Bs:" 
    puts_a(@b) 
end 

def puts_a(strs) 
    for str in strs 
    puts str 
    end 
end 
1

我会做这样的事情:

def overview 
    [@a, @b].each do |e| 
     puts e.join("\n") 
    end 
end 
4
def print_all(header, ary) 
    puts header 
    for f in ary 
    puts f 
    end 
end 

def overview 
    print_all("All As:", @a) 
    puts 
    print_all("All Bs:", @b) 
end 
+1

'for f in ary;把f;结束'是不必要的。只要'放手'就能完成这项工作。 – steenslag 2010-10-01 15:52:47