Quelqu'un peut-il s'il vous plaît expliquer pourquoi Pushing se comporte comme indiqué ci-dessous?
En gros, j'essaie d'imprimer des valeurs d'un tableau peuplé par PUSH code>
aussi nonhift code>
. p>
Lorsque j'essaie d'imprimer le contenu de la matrice peuplée de poussant Code>
à l'aide d'index de tableau, il imprime toujours l'élément en haut de la matrice, alors que la matrice remplie de Unshift code>
imprime le contenu du tableau basé sur l'index de la matrice. Je ne comprends pas pourquoi. P>
/ sans pop em> / p> avec pop h3>
5 Réponses :
Unshift code>
est utilisé pour ajouter une valeur ou des valeurs sur le début fort> fort> d'un tableau: p>
fait le contraire d'un
shift code>. Ou l'opposé d'un
poussez code>, en fonction de la façon dont vous le regardez. p> blockQuote>
Les nouvelles valeurs deviennent alors les premiers éléments du tableau. p>
poussoir code>
ajoute des éléments à la finstrong> d'un tableau: P> traite
tableau code> en tant que pile et appuie les valeurs de la liste
code> à l'extrémité du tableau code>. p> blockQuote>
Merci pour les édits Sinan. C'est définitivement mieux formaté et expliqué maintenant.
Vous devez vraiment utiliser Changez toutes les instances des éléments suivants: p> Ce n'est pas C. Chaque "variable" doit avoir un sigil ( comme pour la différence entre Tree TreatS Array en tant que pile et appuie les valeurs de la liste sur l'extrémité forte> em> du tableau. La longueur de la matrice augmente par la longueur de la liste. ... renvoie le nombre d'éléments dans la matrice après la "poussée" terminée. P>
blockQuote> Unshift Array, liste forte> p>
fait le contraire d'un décalage. Ou le contraire d'une poussée, en fonction de la façon dont vous le regardez. Repends Liste sur le avant fort> em> de la matrice et renvoie le nouveau nombre d'éléments dans la matrice. P>
blockQuote> Pour le mettre ASCII-Matitiquement ... P> utiliser strict; code> et
Utiliser des avertissements; code> dans votre code. Les avoir activés vous permettront d'identifier des erreurs dans votre code.
foreach Name (@names) code> ->
pour mon $ i (@names) code> comme vous ne faites rien avec les éléments du tableau
@names code>. p>
@numbers [i] ->
Numéros $ [$ I] code> Comme il s'agit d'une erreur non rare d'utiliser une tranche de matrice plutôt que de faire référence à un élément de tableau. P>
$ code>,
@ code>,
% code>,
& code> , etc.) devant elle. Que
i code> devrait vraiment être
$ i code>. P>
appuyez sur code> et
Shift code>, la documentation explique: p>
+---------+ +-----------+ +---------+
<----- | ITEM(S) | -----> | (@) ARRAY | <----- | ITEM(S) | ----->
shift +---------+ unshift +-----------+ push +---------+ pop
^ ^
FRONT END
Grand diagramme. J'aimerais que je puisse +2 ça.
Remarque: dans le contexte de "balançoire de réduction d'analyse", un jeton est "décalé" de l'avant de la matrice contenant la chaîne d'entrée (tokénisée) et elle est "poussée" sur la pile.
Cela devrait vraiment être un commentaire, mais c'est trop long pour une boîte de commentaire, alors c'est ici.
Si vous souhaitez illustrer la différence entre Unshift et Push , ce qui suit suffirait: p> sortie: p> note Utiliser strict; code>
vous protège contre de nombreuses erreurs de programmation et utilise des avertissements; code>
vous avertit lorsque vous utilisez des constructions de valeur douteuse. À votre niveau, ni optionnel. P> p>
Notez que P>
Le tableau préallocate est équilibré vers l'extrémité de la matrice (ce qui signifie qu'il y a plus d'espace libre à l'extrémité extrême de la liste que avant l'élément de la liste). Ceci est fait à dessein sur pour faire des pousses plus efficaces que les sans-frères forts>. http://www.perlmonks.org/?node_id=17890 P> blockQuote>
Bien que
listes forts> font assez bien comme "Perl est codé intelligemment car l'utilisation de listes comme des files d'attente a été anticipée (ibid.)" EM>. P>. Pour comparaison, dans divers moteurs JavaScript Shift Strong> / Dushift Strong> sur les tableaux semble être significativement plus lent . P>
Je n'ai vu aucune articulation de ce que ces méthodes font réellement en termes de complexité opérationnelle, ce qui me permet de me a aidé à conceptualiser: Quintessentiellement, je crois que cela s'appelle "Shift" car il doit réellement changer tout le n éléments de votre réseau à de nouveaux indices afin de mettre à jour correctement la propriété de longueur. P>
Push () et POP () Utilisez une complexité opérationnelle plus simple. Peu importe le nombre de n valeurs dans votre matrice, ou votre groupe.length, poussoir ou POP exécutera toujours une opération. Il n'a pas besoin de faire face aux index, il n'a pas besoin de itérer, il n'a pas besoin d'exécuter une opération, toujours à la fin de la pile, en ajoutant ou en supprimant une valeur et une index. p>
Plus important encore, remarquez lorsque vous utilisez Push / POP, que les autres éléments de la matrice ne sont pas affectés - ce sont les mêmes valeurs dans les mêmes indices de votre tableau. La longueur de la matrice est également automatiquement mise à jour correctement à ce que vous vous attendez lors de l'élimination ou de l'ajout de valeurs. P>
D'autre part, SHIFT () et Dushift () Non seulement Ajoutez ou supprimez, mais également à "déplacer" tous les autres éléments de votre réseau en différents indices. Ceci est plus complexe et prend plus de temps car la quantité d'opérations dépend de n, le nombre d'éléments de votre tableau ou une gamme.Longueur. Pour chaque n + 1 plus grand, il doit faire 1 autre opération pour décaler chacune des valeurs dans l'index correct, à la mise à jour correctement de la longueur. p>
Sinon, si cela n'a pas exécuté N Opérations après Maj () et déplacez les autres éléments, vous n'auriez aucun élément à l'index 0, et cela ne changerait pas la longueur de votre tableau, n'est-ce pas? Nous voulons que la longueur de nos matrices se met à jour intuitivement et que vous changez et que le décalage doit exécuter davantage d'opérations pour accomplir cela. P>
Vous devez utiliser
strict code> et
avertissements code>. Quel est le
i code> dans
impression ("éléments individuels sont:". @Numbers [i]. "\ N"); code>? Pourquoi utilisez-vous une tranche de matrice là-bas? Et comment obtenez-vous la sortie que vous montrez de ce script? Oh, et qui a voté cette question? Si tout ce que vous voulez, c'est un badge pour voter sur les questions, le vote, le vote mal posé des questions sur la baisse est également une option valide, vous savez.