メソッドの基本的な前提は、引数配列が多次元配列を取り、行列を時計回りにスネークしてすべての値をarrにプッシュし、それらを整数のリストとして返すことです。小さな再帰メソッドでゼロ値を受け取っています
しかし、私はこのエラーを受けているように見える:
`block in snail': undefined method `reverse' for nil:NilClass (NoMethodError)
これは私の方法である:
def snail(array)
arr = []
loop do
return arr.flatten if array.empty?
arr << array.shift
array.map {|row| arr << row.pop}
arr << array.pop.reverse
array.map {|row| arr << row.shift}
end
end
これはテスト引数です:
[[1,2,3],[4,5,6],[7,8,9]
これが出力されています私はこの行5を編集するときに得ます:
line 5: arr << unless NilClass then array.pop.reverse end
output: [1, 2, 3, 6, 9, nil, 4, 7, 5, 8, nil, nil]
期待リターン:
[1, 2, 3, 6, 9, 8, 7, 4, 5]
は、なぜこれらのnilの値が表示されていますか?
ああ、array.flatten.empty空の配列に対して保護するのに十分であった。したがって、ループが破損する前にnilが返されますか?それはとにかく働いた。ありがとう! –
'array.flatten.empy? 'のブレークはOKですが、配列はすべてのステップで空になる可能性があります。必ずしも4の最後のステップの後である必要はありません。また、ちょうど私が行った編集に注意してください...アルゴリズムに若干の問題があります。 – SteveTurczyn
ええ、昨晩私がもう少し多くのテストを書いてくれたことに感謝しました。私は、すべてのステップが完了した後に配列が空であるかどうかをチェックするだけであることは決して理解しませんでした。それは私が推測する論理的な意味があります。 –