2010-11-24 5 views
5

배열 집합을 포함하는 배열이 있습니다. 요소의 순서는 중요하지 않습니다. Perl에서 알고있는 가장 간단한 데이터 구조이기 때문에 배열을 사용합니다.Perl에서 배열 요소를 삭제하는 '올바른 방법'은 무엇입니까?

my @arr = ... 
while (some condition) { 
    # iterate over @arr and remove all elements which meet some criteria 
    # (which depends on $i) 
} 

나는 splice() 알고 있지만, 나는 그것이 반복하면서 그것을 사용하는 좋지 않다 생각합니다. 배열 요소에 대한 delete은 더 이상 사용되지 않습니다. 아마도 @arrgrep을 자체 (@arr = grep {...} @arr)로 사용 하시겠습니까?

가장 좋은 방법은 무엇입니까?

아마 해시를 사용해야합니다 (실제로는 필요하지 않지만).

+0

가능한 중복 [Perl로 배열에서 값을 삭제하는 가장 좋은 방법은 무엇입니까? (http://stackoverflow.com/questions/174292/ Perl에서 가치를 지우는 가장 좋은 방법은 무엇인가?) –

답변

7

그렙를 사용하여 당신의 생각은 좋은

@arr = grep { cond($i++); } @arr; 
7

문서에 따르면 배열 값에 대해 delete을 호출하는 것이 더 이상 사용되지 않으며 향후 버전의 Perl에서 제거 될 가능성이 있습니다.

양자 택일로, 당신은 필요한 인덱스의 목록을 구축하고 원래의 배열에 슬라이스를 할당 할 수

@arr = @arr[ @indices ]; 

당신은 perldata에서 조각에 대한 자세한 내용을보실 수 있습니다.

관련 문제