2010-11-24 12 views
5

Tengo una matriz que contiene un conjunto de elementos. El orden de los elementos es irrelevante. Utilizo una matriz porque es la estructura de datos más simple que conozco en Perl.¿Cuál es la forma "correcta" de eliminar elementos de matriz en Perl?

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

sé de splice() pero creo que no es bueno usarlo mientras que la iteración. delete para elementos de matriz parece obsoleto. Tal vez use grep en @arr en sí mismo (@arr = grep {...} @arr)?

¿Cuál es la mejor práctica aquí?

¿Quizás use un hash (aunque realmente no lo necesito)?

+0

posible duplicado de [¿Cuál es la mejor manera de eliminar un valor de un array en Perl?] (Http://stackoverflow.com/questions/174292/ what-is-the-best-way-to-delete-a-value-from-an-array-in-perl) –

Respuesta

7

Su idea de usar grep es bueno

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

De acuerdo con los documentos, la llamada a delete en los valores de matriz está en desuso y es probable que se elimine en una versión futura de Perl.

Como alternativa, puede crear una lista de índices necesarios y asignar la rebanada de la matriz original:

@arr = @arr[ @indices ]; 

Puede leer más sobre rebanadas de perldata.

Cuestiones relacionadas