在Ruby中对多维数组进行迭代的格式

时间:2018-07-04 02:37:12

标签: arrays ruby multidimensional-array

我是Ruby编码的新手,我有一个关于遍历多维数组的快速问题。我需要知道什么是合适的格式。这是我的代码,用于遍历数组“颜色”

colors = [['red','orange'],['purple','blue'],['yellow','green']]
colors.each{ |sub_arrays|
    sub_arrays.each{ |items|
        puts "#{items}"
    }
}

这是答案代码

colors = [['red', 'orange'],['purple','blue'],['yellow','green']]

colors.each do |sub_arrays|

sub_arrays.each do |items|
    puts "#{items}"
end
end

我在问这是否只是答题纸上的错误,或者这实际上是您应该如何格式化此代码。另外,最好在大括号中使用关键字“ do”和“ end”吗?而且我应该把元素| sub_arrays |或|项目|与.each方法在同一行上?谢谢!

1 个答案:

答案 0 :(得分:1)

在Ruby中格式化只是惯例,并不是真正强制执行,因为它是其他一些语言(如Python),但是对于可读性和避免由于语法的“自由”而造成的某些缺陷仍然非常重要。

按照惯例,就缩进而言,该示例是“错误的”,第二个do..end循环应从外部循环缩进。

对于{..}do..end而言,它在很大程度上是主观的,但是要使用的一个经验法则是:如果该语句将延伸到一行以上,或者如果它是嵌套的,则首选do..end语法。 {..}的嵌套使用很难看,应该避免。这遵循Ruby的“丑陋的代码看起来丑陋”的方式。

可以使用一些其他的合成糖来避免使用任何类型的块,但这超出了问题的范围。

如果我本人要写那句话,我会喜欢这样的东西:

  colors.each do |sub_arrays|
    sub_arrays.each { |items| puts items }
  end

或...

  colors.each do |sub_arrays|
    sub_arrays.each do |item|
      puts items
    end
  end

但是我绝对会避免使用嵌套花括号。我不相信有人会同意在内部循环上保持相同的缩进是实现这一目标的“正确”方法。在同一缩进级别上连续end看起来很糟糕,而且格式错误。