Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    46

    Funzione 'splice' in ciclo Foreach e gestione indice ciclo

    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
    zamak

  2. #2
    Non conosco metodi per alterare il sistema di indicizzazione di foreach, per cui, se voui conservare la tua impostazione, consiglierei di usare for:

    for ($i=0; $i<=$#array; $i++) {
    $array[$i]....
    }

    ed effettuando le manovre di aggiustamento su $i.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    46
    OK, a questo punto penso proprio che utilizzerò for.

    Grazie 1000, ciao
    zamak

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.