Je stocke des valeurs dans un tableau à l'aide de la fonction push
. La première valeur dans le tableau est stockée à 4 éléments au lieu du premier élément. Par exemple, après avoir stocké des valeurs lorsque j'imprime le premier élément $array[1]
il imprime l'espace/rien mais quand j'imprime le quatrième élément $array[4]
il imprime la première valeur. Des suggestions sur la façon de supprimer les valeurs indésirables en début de tableau?Comment puis-je supprimer les valeurs indésirables du début d'un tableau en Perl?
Répondre
while (value_meets_shubster_s_definition_of_crap($array[0])) {
shift @array;
}
sub value_meets_shubster_s_definition_of_crap {
my $value = shift;
&helip;
return true or false;
}
& hellip; mais il serait préférable d'éviter de mettre des valeurs de "merde" sur le tableau en premier lieu.
"il serait préférable d'éviter de mettre des valeurs de" merde "sur le tableau en premier lieu." - Merci pour cela, j'avais oublié une règle d'or. – Structure
Si vous voulez éliminer toutes les valeurs non désirées:
@array = grep { not value_meets_shubster_s_definition_of_crap($_) } @array;
Cependant, comme l'a souligné David Dorward, ce qui élimine les valeurs non désirées à partir du milieu du tableau ainsi. Pour se débarrasser des seules valeurs au début, vous pouvez utiliser first_index
de List::MoreUtils qui pourrait être plus efficace qu'une boucle de shift
s:
#!/usr/bin/perl
use strict;
use warnings;
use List::MoreUtils qw(first_index);
my @array = (0, 1, 0, 2);
my $begin = first_index { not is_unwanted($_) } @array;
@array = @array[ $begin .. $#array ];
print "@array\n";
sub is_unwanted {
my ($v) = @_;
return if $v;
return 1;
}
__END__
Sortie:
C:Temp> yjk
1 0 2
Mise à jour: Mon l'intuition semble avoir été erronée:
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw(cmpthese);
use List::MoreUtils qw(first_index);
my @array = (0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9);
cmpthese -10, {
'first_index' => \&using_first_index,
'shift' => \&using_shift,
'nop' => \&nop,
};
sub using_first_index {
my @result = @array;
my $begin = first_index { not is_unwanted($_) } @result;
@result = @result[ $begin .. $#result ];
}
sub using_shift {
my @result = @array;
shift @result while is_unwanted($result[0]);
}
sub nop { my @result = @array; }
sub is_unwanted {
my ($v) = @_;
return if $v;
return 1;
}
Résultats:
Rate first_index shift nop
first_index 75767/s -- -71% -89%
shift 258810/s 242% -- -61%
nop 664021/s 776% 157% --
Cela laisserait passer les valeurs de "crap" au milieu du tableau. La question précisait le début :) – Quentin
@David Dorward: ITYM * éliminer *. –
Vous pouvez supprimer des éléments du recto d'un tableau à l'aide de l'opérateur 'shift'.
Mais je pense que le problème est plus profond que cela et que vous le regardez de la mauvaise façon. Si vous stockez des valeurs inconnues, «non désirées» dans un tableau, vous devez déterminer où et pourquoi cela se produit et l'empêcher, et ne pas simplement contourner celles-ci pour trouver ce que vous cherchez.
Comment créez-vous la matrice? En utilisant mes incroyables pouvoirs d'ESP, je vais deviner que vous avez un split
quelque part qui garde les champs vides. Si je me trompe, vous devrez nous en dire plus sur ce que vous faites. Vous avez un peu un problème XY ici. Vous nous demandez comment implémenter une solution que vous avez déjà choisie plutôt que de nous laisser résoudre le problème.
- 1. Comment supprimer des éléments en double d'un tableau en Perl?
- 2. Comment ajouter tr au début du tableau
- 3. Convertir les valeurs du dictionnaire en tableau
- 4. Comment faire pour supprimer les caractères indésirables d'une chaîne?
- 5. C#: Supprimer les valeurs en double du dictionnaire?
- 6. Comment puis-je supprimer du texte au début d'un fichier en utilisant une regex?
- 7. Comment faire pour supprimer les valeurs en double d'un tableau en PHP
- 8. Comment faire pour supprimer les valeurs en double d'un tableau en PHP et compter l'occurrence?
- 9. Doctrine: Définir les valeurs du modèle en tant que tableau
- 10. Comment réduire un tableau en Perl?
- 11. Tableau, comment afficher les "valeurs changeantes" seulement
- 12. Comment détecter les valeurs en double dans un tableau PHP?
- 13. Comment ré-indexer les valeurs d'un tableau en PHP?
- 14. Comment comparer les valeurs dans un tableau
- 15. pour imprimer les valeurs d'un tableau après l'extraction du tableau en php
- 16. Comment obtenir des valeurs par les opérations de chaînes Perl?
- 17. En cas de panne de l'index du tableau fixe, comment redémarrer de manière pragmatique au début
- 18. Supprimer un objet du tableau dans NSTableView
- 19. Comment combiner les clés et les valeurs d'un tableau en PHP
- 20. comment puis-je supprimer les objets indésirables de mon repo après filtre branche --subdirectory filtre
- 21. Remplacer les chaînes du premier tableau par des valeurs du deuxième tableau
- 22. Comment puis-je supprimer des privilèges en Perl?
- 23. Comment ouvrir un tableau de fichiers en Perl?
- 24. Que signifie un tableau $ # en Perl?
- 25. Comment puis-je supprimer du HTML dans une chaîne en utilisant Perl?
- 26. Transformer les valeurs des tableaux de chaînes en objet tableau
- 27. Comment stocker un tableau 2d dans un hachage en Perl?
- 28. Insérer et supprimer des lignes d'un tableau int en C++?
- 29. Empêcher Perforce de vérifier les fichiers indésirables
- 30. Créer un tableau en utilisant les valeurs d'index d'un autre tableau
Que pousses-tu dans ton tableau? Ca peut être le problème. On dirait que vous êtes en train de pousser un tableau dans un autre au lieu de pousser un scalaire. D'ailleurs, le premier élément est à l'index 0, pas 1. – jeje
@ jeje: je pousse des valeurs après avoir fait correspondre les regex. quelque chose comme ceci: push (@value, join ("", $ file = ~/$ find /)) – shubster
@shubster Ok, donc vous poussez un tableau (apparemment de 5 éléments) dans votre tableau @value. – jeje