Nice programing

배열을 반복하는 동안 Array # delete를 어떻게 사용할 수 있습니까?

nicepro 2020. 11. 17. 21:06
반응형

배열을 반복하는 동안 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에서 반복하는 동안 삭제 하시겠습니까?

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

반응형