comment combiner deux prochains si ensemble


Nikolan Asad

J'ai un script qui s'exécute sur la liste des fichiers pour faire certaines des modifications, chaque fichier d'entre eux a un événement d'appel et les détails de l'événement d'appel contiennent 4 éléments donc je veux juste faire les changements sur 2 d'entre eux seulement ici je ' next ifJe ne sais pas comment combiner deux boucles en une seule boucle, ici, j'ai utilisé 2 boucles pour faire le travail mais cela prend plus de temps, y a-t-il une idée sur la façon de faire cela?

my $calleventtag = $struct->{'transferBatch'}->{'callEventDetails'};
my @indexes = reverse (grep { exists $calleventtag->[$_]->{'supplServiceEvent'} } 0..$#$calleventtag);

    my $sup_event_cnt = $#indexes;

    foreach my $index (@indexes)
    {
    splice (@$calleventtag , $index,1);
    }
foreach (0..$#$calleventtag)
    {
    next if ( ! exists $calleventtag->[$_]->{'mobileOriginatedCall'}) ;

        if ( exists $calleventtag->[$_]->{'mobileOriginatedCall'}->{'basicCallInformation'}->{'destinationNetwork'} )
        {
            delete $calleventtag->[$_]->{'mobileOriginatedCall'}->{'basicCallInformation'}->{'destinationNetwork'};
        }

        if ( exists $calleventtag->[$_]->{'mobileOriginatedCall'}->{'basicCallInformation'}->{'chargeableSubscriber'}->{'simChargeableSubscriber'}->{'msisdn'} 
        && $calleventtag->[$_]->{'mobileOriginatedCall'}->{'basicCallInformation'}->{'chargeableSubscriber'}->{'simChargeableSubscriber'}->{'msisdn'} !~ m/^96279/ 
        )
        {
            delete $calleventtag->[$_]->{'mobileOriginatedCall'}->{'basicCallInformation'}->{'chargeableSubscriber'}->{'simChargeableSubscriber'}->{'msisdn'};
        }

    }
foreach (0..$#$calleventtag)
    {
next if ( ! exists $calleventtag->[$_]->{'gprsCall'});

    if ( exists $calleventtag->[$_]->{'gprsCall'}->{'gprsBasicCallInformation'}->{'gprsDestination'}->{'accessPointNameOI'} )
            {
                delete $calleventtag->[$_]->{'gprsCall'}->{'gprsBasicCallInformation'}->{'gprsDestination'}->{'accessPointNameOI'};
            }
    }
ikegami
for (...) {
   next if ...;

   ...
}

peut également être écrit comme

for (...) {
   if (!...) {
      ...
   }
}

Vous pouvez utiliser les éléments suivants:

use Data::Diver qw( Dive );

my $call_event_details = Dive($struct, qw( transferBatch callEventDetails ));

for my $call_event_detail (@$call_event_details) {
   next if !$call_event_detail->{supplServiceEvent};

   if ( my $bci = Dive($call_event_detail, qw( mobileOriginatedCall basicCallInformation )) ) {
      delete $bci->{destinationNetwork};

      if ( my $scs = $bci->{simChargeableSubscriber} ) {
         my $msisdc = $scs->{msisdn};
         delete $scs->{msisdn} if $msisdc && $msisdc !~ /^96279/;
      }
   }

   if ( my $dest = Dive($call_event_detail, qw( gprsCall gprsBasicCallInformation gprsDestination )) ) {
      delete $dest->{accessPointNameOI};
   }
}

Remarques:

  • Les guillemets autour des littéraux de chaîne ne sont pas nécessaires dans les index de hachage si la chaîne est un identificateur valide valide. Par exemple, $hash->{'foo'}peut être écrit comme $hash->{foo}.
  • ->n'est pas nécessaire entre deux index. Par exemple, $hash->{foo}->{bar}peut être écrit comme $hash->{foo}{bar}.
  • Si un élément de hachage est une référence ou n'existe pas, vous n'avez pas besoin d'utiliser existspour vérifier si vous avez une référence; vous pouvez utiliser un simple test de vérité puisque les références sont toujours vraies.
  • [BUG FIX] $hash->{foo}{bar}peut s'autovivifier $hash->{foo}(provoquer une référence à lui être assignée), donc vos tests pour vérifier si des éléments existent pourraient en fait provoquer la création de choses. Pour résoudre ce problème, vous pouvez remplacer

    if ($hash->{foo}{bar})
    

    avec

    if ($hash->{foo} && $hash->{foo}{bar})
    

    ou

    if (Dive($hash, qw( foo bar )))
    
  • L'utilisation ->{foo}{bar}{baz}répétée de la même longue chaîne d'index ( ) est sujette aux erreurs.

  • Il est préférable d'utiliser des noms pluriels pour les tableaux. Tout d'abord, c'est plus descriptif, mais cela facilite également le choix des noms pour les variables de boucle.
  • En parlant de noms de variables, pourquoi utiliser $calleventtagpour le nom de la variable contenant des callEventDetailsnœuds?
  • Vous n'avez pas besoin de vérifier si un élément de hachage existe avant d'essayer de le supprimer; deletepeut être passé un élément qui n'existe pas.
  • Pas besoin de boucler sur les index d'un tableau si vous n'avez pas besoin des index.
  • grepétait un bon choix, mais ce splicen'était pas le cas. Vous devriez avoir utilisé: $calleventtag = [ grep { ... } @$calleventtag ];. J'ai déplacé le chèque dans la boucle.

Articles connexes


Comment combiner deux graphiques linéaires ensemble

Engrenages Je suis nouveau dans l'utilisation de R, veuillez donc rester avec moi car mon code pourrait ne pas être le meilleur. Je veux donc combiner ces deux graphiques linéaires ensemble car en ce moment j'ai écrit du code pour chaque élément que j'analyse.

Comment combiner deux sites Gatsby ensemble

Jibin Thomas Actuellement, j'ai deux sites développés à l'aide de gatsby.js déployés sur example.com et blog.example.com. Je souhaite créer un sous-répertoire de blog.example.com vers example.com/blog. Existe-t-il un moyen de le faire sans fusionner les deux r

combiner deux formats ensemble

Michael Je fais le formatage d'un dataframe. J'ai besoin de faire le séparateur des milliers et les décimales. Le problème est que lorsque je les combine ensemble, seul le dernier est en vigueur. Je suppose que beaucoup de gens peuvent avoir la même confusion,

Combiner deux fonctions ensemble

Frank Smith J'ai deux fonctions nl2bret substrque je voudrais combiner ensemble, quelqu'un pourrait-il s'il vous plaît dire comment je pourrais y parvenir: <?php echo nl2br($row_rsMyrecordSet['text']); ?> <?php echo substr($row_rsMyrecordSet['text'],0,10); ?>

Comment combiner et nier ces deux modèles ensemble?

marlon: Dans VIM, je souhaite supprimer toutes les lignes qui ne comportent pas 2 ou 3 caractères. :g/^..$/d :g/^...$/d Ceux-ci suppriment 2 ou 3 lignes de caractères. Comment combiner les deux en un et l'annuler, à savoir `` ne pas supprimer 2 ou 3 lignes de

Comment combiner deux chemins SVG ensemble (sans espaces)

Raphael Rafatpanah J'ai pu fusionner deux chemins séparés en utilisant cette technique . Cependant, mon animation traite toujours cela comme deux chemins distincts. Existe-t-il un moyen de combiner ces deux chemins sans utiliser d'espaces? M3322.09,361.23V473.

Comment combiner deux fonctions ensemble dans Java Android

sk123 Comment puis-je être capable de combiner ces deux fonctions en une seule et de pouvoir effectuer deux actions Invisible et invisible. Je ne veux pas simplement obtenir la déclaration if de la méthode buttonInVisible et simplement la mettre dans la comman

Comment combiner ces deux requêtes ensemble? (MySQL)

AlphaSierra nouveau ici et à MySQL. Je me demande comment je peux combiner ces deux requêtes ensemble pour obtenir 1 sortie. Je veux inclure toutes les heures inférieures ou égales à 30, ET les heures qui correspondent exactement à 40. Je peux obtenir 2 sortie