Ciao a Tutti,
Avendo un @Array consideriamo che:
1. Devo Confrontare ogni Elemento della lista con tutti i successivi ad esso, prendendo quindi in considerazione il primo elemento (A) per confrontarlo volta per volta con ogni altro (B).
2. MA, se un Confronto tra elemento (A) e (B) ha esito positivo per la condizione applicata, devo cancellare l'elemento (B) e continuare il ciclo con il prossimo elemento (B).
3. Il problema che sorge è che dopo l'eliminazione di un elemento (all'interno del ciclo), la parte seguente dell'array scala tutta "in su" di un elemento ed il ciclo foreach continua SALTANDO l'elemento che segue quello cancellato.
Da tenere presente che:
potrei ottenere il risultato finale con altri sistemi, ma sto chiedendo aiuto per utilizzare questo sistema perchè credo sia il più 'pulito' per effettuare meno cicli e 'controlli' possibile ed occupare meno memoria possibile riducendo la lista man mano.
QUINDI, DOMANDA DIRETTA:
c'è un modo per alterare il sistema di indicizazione usato da foreach per diminuirlo di 1 ogni qualvolta un elemento viene cancellato??? (non conosco variabili speciali con questo scopo)
Per Meglio spiegarmi ecco il codice (ridotto all'osso):
# Vedere commenti
codice:
@array = (el1, el2, el3, el4, el5, el6);
A: while(@array > 1) {
my $elA = shift(@array); # $array[0] è eliminato e sarà usato per i confronti
my $index = -1;
B: foreach my $elB(@array) {
$index++;
if( .......... ) {
...........
splice(@array, $index, 1); # $array[$index] è eliminato
}
# Ipotiziamo il ciclo sia al punto dell'elemento 'el3' della lista,
# e che la condizione sopra sia Vera per l'elemento 'el3'
# quindi l'elemento 'el3' viene eliminato con splice da @array che
# diventa (el1, el2, el4, el5, el6)
# e il ciclo continuerà con il prossimo elemento che sarà 'el5' mentre
# io devo ancora vagliare 'el4'
# a questo punto, Domanda:
# è possibile alterare il sistema di indicizazione del foreach
# così che prenda in considerazione 'el4' e non 'el5' al prossimo giro?
} # B: foreach
} # A: while
grazie per l'aiuto,
ciao