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