Ich bin ein Anfänger arbeiten durch einige Übungen. Ich versuche, ein 2-dimensionales Array derart zu manipulieren, dass, wenn ein Element eine 1 ist, dann werden die umgebenden nicht-diagonalen Elemente in 1 geändert werden soll:Ändern der umgebenden Elemente eines Array-Elements
[[0,0,0,0],
[0,0,1,0],
[0,0,0,0],
[0,0,0,0]]
zurück
[[0,0,1,0],
[0,1,1,1],
[0,0,1,0],
[0,0,0,0]]
I sollte Ich stoße auf Probleme mit verschachtelten each_with_index: Nachdem ich die anfänglichen Änderungen für die linke und die rechte Umgebung angepasst habe, nimmt die Methode bei der Iteration eine frühere Anpassung vor und führt zu einer unerwünschten Änderung. Darüber hinaus, die die Linie sollte die „unten“ Element ändern wirft einen Fehler:
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
Irgendwelche Vorschläge, wie ich über die Lösung dieser beiden Aspekte gehen können, werden gut aufgenommen werden.
Welche unerwünschte Änderung? Arbeite darüber. Welcher Fehler? – sawa