[ruby] Ruby에서 반복하는 동안 배열을 수정하려면 어떻게해야합니까?

나는 루비를 배우는 중이므로 이것이 너무 초보자라면 사과하지만 곡괭이 책에서 이것을 해결할 수는 없습니다 (아마 충분히주의 깊게 읽지 않을 것입니다). 어쨌든, 다음과 같은 배열이 있다면 :

arr = [1,2,3,4,5]

… 배열의 각 값에 3을 곱하고 싶습니다. 다음을 수행했습니다.

arr.each {|item| item *= 3}

… 내가 원하는 것을 얻지 못할 것입니다 (그리고 왜 배열 자체를 수정하지 않는지 이해합니다).

내가 얻지 못하는 것은 반복자 후 코드 블록 내부에서 원래 배열을 수정하는 방법입니다. 나는 이것이 매우 쉽다고 확신합니다.



답변

map이전 어레이에서 새 어레이를 만드는 데 사용 합니다.

arr2 = arr.map {|item| item * 3}

map!배열을 수정하는 데 사용 합니다.

arr.map! {|item| item * 3}

온라인 작업보기 : ideone


답변

배열을 직접 수정하려면 arr.map! {|item| item*3}. 원본 (일반적으로 선호 됨)을 기반으로 새 배열을 만들려면 arr.map {|item| item*3}. 사실, 난 항상 사용하기 전에 두 번 생각 each일반적으로 같은 고차원 적 기능이 있기 때문에, map, select또는 inject그게 내가 원하는 것을.


답변

arr.collect! {|item| item * 3}


답변