반응형
배열을 반복하는 동안 Array # delete를 어떻게 사용할 수 있습니까?
반복하고 일부 요소를 삭제하려는 배열이 있습니다. 작동하지 않습니다.
a = [1, 2, 3, 4, 5]
a.each do |x|
next if x < 3
a.delete x
# do something with x
end
a #=> [1, 2, 4]
내가 할 a
수 [1, 2]
. 이 문제를 어떻게 해결할 수 있습니까?
a.delete_if { |x| x >= 3 }
최신 정보:
블록에서 x를 처리 할 수 있습니다.
a.delete_if do |element|
if element >= 3
do_something_with(element)
true # Make sure the if statement returns true, so it gets marked for deletion
end
end
배열에서 삭제할 필요가 없으며 다음과 같이 필터링 할 수 있습니다.
a = [1, 2, 3, 4, 5]
b = a.select {|x| x < 3}
puts b.inspect # => [1,2]
b.each {|i| puts i} # do something to each here
얼마 전에이 질문을했습니다.
Ruby가 .each
무언가를 삭제하려고 할 때 루프를 종료하기 때문에 작동하지 않습니다 . 단순히 배열에서 항목을 삭제하려는 경우 delete_if
작동하지만 더 많은 제어를 원한다면 해당 스레드에있는 솔루션이 작동하지만 다소 추한 것입니다.
이를 수행하는 또 다른 방법 reject!
은를 사용 하는 것입니다. !
이는 "이렇게하면 배열이 변경 될 것입니다"라는 의미 가 있으므로 더 명확합니다 . 유일한 차이점은 변경 사항이 없으면 reject!
반환 된다는 것 nil
입니다.
a.delete_if {|x| x >= 3 }
또는
a.reject! {|x| x >= 3 }
둘 다 잘 작동합니다.
참고 URL : https://stackoverflow.com/questions/3260686/how-can-i-use-arraydelete-while-iterating-over-the-array
반응형
'Nice programing' 카테고리의 다른 글
python pip는 라이브러리 디렉토리와 포함 디렉토리를 지정합니다. (0) | 2020.11.17 |
---|---|
Vim : 단어 대 WORD (0) | 2020.11.17 |
목록이 있는지 확인하는 가장 빠른 방법 (0) | 2020.11.17 |
SQL Server에서이 오류가 발생하는 이유 : 'id'열에 NULL 값을 삽입 할 수 없습니다. (0) | 2020.11.17 |
AssertEquals 2 목록은 순서를 무시합니다. (0) | 2020.11.17 |