私はいくつかの演習を行っている初心者です。配列要素の周囲の要素を変更する
[[0,0,0,0],
[0,0,1,0],
[0,0,0,0],
[0,0,0,0]]
[[0,0,1,0],
[0,1,1,1],
[0,0,1,0],
[0,0,0,0]]
Iを返す必要があります。私は、要素が1である場合、次いで、周囲の非対角要素が1に変更されなければならないような2次元アレイを操作しようとしています入れ子になったeach_with_indexを使って問題に遭遇しています:周囲の左右の初期の変更を調整した後、メソッドが反復するにつれて、それは以前の調整によってピックアップされ、望ましくない変更を行います。また、「底」の要素を変更する必要があります行がエラーを投げている:
a = [[0,0,0,0],
[0,0,1,0],
[0,0,0,0],
[0,0,0,0]
]
a.each_with_index do |m, n| # n == index of main array
m.each_with_index do |x, y| # y == index of subarray
if x == 1
a[n][y+1] = 1 unless (a[n][y+1]).nil? #right
a[n][y-1] = 1 unless (a[n][y-1]).nil? #left
a[n-1][y] = 1 unless (a[n-1][y]).nil? #top
a[n+1][y] = 1 unless (a[n+1][y]).nil? #bottom--currently giving an error
end
end
end
任意の提案を、私はうまく受信されるこれら二つの側面を解決して行くことができる方法のよう。
何が望ましくない変更ですか?それを詳しく説明してください。何のエラー? – sawa