Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
813 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  ajouter une même valeur à tous les éléments d'un tab...[autre quest°]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ajouter une même valeur à tous les éléments d'un tab...[autre quest°]

n°1055185
babarpapa
Posté le 21-04-2005 à 14:33:13  profilanswer
 

Voilà, j'ai un petit problème...
j'ai un tableau où chaque élément est un entier.ex : [8,12,13,15,16]
j'aimerai savoir s'il y a un moyen d'ajouter de manière légère une constante à chaque élément du tableau. ex : ajouter 1 à chaque élément. le tableau deviendrai : [9,13,14,16,17]
le pb, c'est qu'il faudrait que ça soit le plus léger possible car je travaille sur un tas de tableau. la valeur qu'on ajoute sera tjs +1.
Pouvez vous m'aider svp?  :jap:


Message édité par babarpapa le 22-04-2005 à 11:50:13

---------------
http://festivaldujeu-montpellier.org/
mood
Publicité
Posté le 21-04-2005 à 14:33:13  profilanswer
 

n°1055358
pospos
Posté le 21-04-2005 à 16:21:25  profilanswer
 

le mieux est sans doute de garder l'increment dans une autre variable, et donc de l'augmenter à chaque fois sans toucher au tableau, puis, au moment d'afficher le tableau ou de le sauvegarder (etc.), tu ajoute une bonne fois la valeur de l'increment à tous tes elements et tu le remet à 0. Tu peux egalement considerer que la valeur d'un element de ton tableau est toujours etre considérée comme valeur+increment

n°1056243
babarpapa
Posté le 22-04-2005 à 11:49:38  profilanswer
 

merci, ta réponse me va très bien ;)
j'ai un autre petit souci...
j'ai un hash avec les clé qui sont des noms de genes : ex : [CX98,BX32,CZ58 etc...]
et à chaque clé correspont une liste de nombre : [2,4,8,12 etc...].
je vais faire un foreach my $subject (keys %hash){ ...}
sauf qu'il faudrait que le premier $subject soit le nom de gene qui à comme tableau qui lui est affecté le plus petit premier élément de la liste...
c'est pas super clair.. :)
ex : cX98 => [2,4,8,12]
     BX32 => [4,8,25]
 
et donc j'aimerai que ce soit CX98 qui soit le premier $subject que j'analyse, car il a comme premier élément 2.
j'espère que j'ai été a peu près clair...
merci pour votre aide  

n°1056274
pospos
Posté le 22-04-2005 à 12:03:06  profilanswer
 

il faut faire une fonction de tri
ca donnera un truc genre (non testé):

Code :
  1. for my $subject (sort {$hash{$a}->[0] <=> $hash{$b}->[0]} keys %hash) {...}


Message édité par pospos le 22-04-2005 à 12:03:44
n°1056301
babarpapa
Posté le 22-04-2005 à 12:20:50  profilanswer
 

il faut que j'ajoute à la première valeur du tableau la valeur d'incrémentation (dont on parle plus haut), et que je compare avec cette valeur ajouté au premier élément. la valeur 'incrémentation se trouve ici :

Code :
  1. $hash{$subject}{incremt}


alors que le tableau se trouve là :  

Code :
  1. @hash{$subject}{pos}


 
donc est ce que je peux écrire ça :

Code :
  1. for my $subject (sort {($rh_sub_gap{$a}->[0] + $rh_sub_gap{$a}{incremt}) <=> ($rh_sub_gap{$a}->[0] + $rh_sub_gap{$a}{incremt})} keys %hash) {...}


 
ça veut peut etre rien dire... :)


Message édité par babarpapa le 22-04-2005 à 13:24:01

---------------
http://festivaldujeu-montpellier.org/
n°1056454
pospos
Posté le 22-04-2005 à 13:41:30  profilanswer
 

oui ca doit marcher (avec $b dans la partie droite evidemment)


Message édité par pospos le 22-04-2005 à 13:42:09
n°1056480
babarpapa
Posté le 22-04-2005 à 13:50:31  profilanswer
 

ah oui, pardon ;)
merci pour ton aide


---------------
http://festivaldujeu-montpellier.org/
n°1056495
pospos
Posté le 22-04-2005 à 13:55:56  profilanswer
 

mais attend, je pige pas un truc:
c'est pas un tableau aen fait ton truc, c'est une hash??
tu fais une hash avec des entiers comme clé? C'est pas tres efficace ca.
 
donc en fait t'as ca (par exemple) :
cX98 => {
 0 => 2,
 1 => 4,
 2 => 8,
 3 => 12,
 increment => 4
}
 
c'est bien ca?
donc dans ce cas c'est

Code :
  1. for my $subject (sort {($rh_sub_gap{$a}->{0} + $rh_sub_gap{$a}->{incremt}) <=> ($rh_sub_gap{$b}->{0} + $rh_sub_gap{$b}->{incremt})} keys %rh_sub_gap) {...}


 
ou ->{1} si le premier element de ton tableau est sur le rang 1
 
mais bon, c'est moins efficace en terme de place et de vitesse qu'un vrai tableau
 
ce que tu pouurais faire c'est conserver un tableau et mettre l'increment sur le premier element, en considerant que le tableau commence au suivant (donc ->[1])
 
t'aurais donc:
$hash{$subject}->[0] = increment
et
$hash{$subject}->[1] = premier element
 
et donc:

Code :
  1. for my $subject (sort {($rh_sub_gap{$a}->[1] + $rh_sub_gap{$a}->[0]}) <=> ($rh_sub_gap{$b}->[1] + $rh_sub_gap{$b}->[0])} keys %rh_sub_gap) {...}


Message édité par pospos le 22-04-2005 à 13:56:52
n°1056502
babarpapa
Posté le 22-04-2005 à 14:00:55  profilanswer
 

je t'embete une toute derniere fois...(pour aujourd'hui ^^)
c'est un tableau que je passe par référence à un sous programme.
et je suis pas allaise avec ça...
ça s'écrit comme ça quand le tableau de hash est une référence?  

Code :
  1. for my $subject (sort {($$rh_sub_gap{$a}->[0] + $$rh_sub_gap{$a}{incremt}) <=> ($$rh_sub_gap{$b}->[0] + $$rh_sub_gap{$b}{incremt})} keys %$rh_sub_gap) {...}


---------------
http://festivaldujeu-montpellier.org/
n°1056518
pospos
Posté le 22-04-2005 à 14:05:27  profilanswer
 

oui, mais ecrit plutot plutot $rh_sub_gap->{$a}->[0]


Message édité par pospos le 22-04-2005 à 14:05:56
mood
Publicité
Posté le 22-04-2005 à 14:05:27  profilanswer
 

n°1056521
babarpapa
Posté le 22-04-2005 à 14:06:38  profilanswer
 

ok ^^
et donc également  $rh_sub_gap->{$a}{incremt} j'imagine?


Message édité par babarpapa le 22-04-2005 à 14:07:47

---------------
http://festivaldujeu-montpellier.org/
n°1056938
babarpapa
Posté le 22-04-2005 à 16:52:44  profilanswer
 

quand tu mets for... c'est for ou foreach?  :)


---------------
http://festivaldujeu-montpellier.org/
n°1056950
babarpapa
Posté le 22-04-2005 à 16:57:04  profilanswer
 

la structure du hash est cela au fait :
cX98 => {  
 gap_pos => [2,5,6,8,9,25]  
 increment => 4  
}  
cX25 => {
 gap_pos => [4,5,8,12,15,19]  
 increment => 2  
}  
 
ou CX98 et CX25 sont les clé...
je sais pas si tu vois mieux?...
 
 
 
donc au final, ça serait un truc comme ça, non?

Code :
  1. foreach my $subject (sort {($rh_sub_gap->{$a}{gap_pos}->[0] + $rh_sub_gap->{$a}{incremt}) <=> ($rh_sub_gap->{$b}{gap_pos}->[0] + $rh_sub_gap->{$b}{incremt})} keys %$rh_sub_gap) {


 
mais ça marche pas  :)


Message édité par babarpapa le 22-04-2005 à 17:03:09

---------------
http://festivaldujeu-montpellier.org/
n°1057026
pospos
Posté le 22-04-2005 à 17:47:47  profilanswer
 

chez moi ca marche:

Code :
  1. my %hash = (
  2. cX98 => { 
  3.  gap_pos => [2,5,6,8,9,25],
  4.  increment => 10 
  5. },
  6. cX25 => {
  7.  gap_pos => [10,5,8,12,15,19],
  8.  increment => 1 
  9. },
  10. );
  11.  
  12. my $rh_sub_gap = \%hash;
  13. for my $subject (sort {($rh_sub_gap->{$a}->{gap_pos}->[0] + $rh_sub_gap->{$a}->{increment}) <=> ($rh_sub_gap->{$b}->{gap_pos}->[0] + $rh_sub_gap->{$b}->{increment})} keys %$rh_sub_gap) {
  14. print "$subject\n";
  15. }


 
t'as du te gourer en ecrivant increment (incremt)
 
sinon j'ai rajouté les '->' pasque c'est plus correcte (mais ca marchait)

n°1058260
babarpapa
Posté le 23-04-2005 à 23:23:19  profilanswer
 

j'ai pas encore tester, mais c koi la difference entre le for de ton code et foreach stp?
 
d'autre part, je suis aller un peu vite, car quand je te dit que c'est ça mon tableau de hashage :
my %hash = (  
    cX98 => {    
     gap_pos => [2,5,6,8,9,25],  
     increment => 10    
    },  
    cX25 => {  
     gap_pos => [10,5,8,12,15,19],  
     increment => 1    
    },  
);
 
en fait, gap_pos n'est pas directement associé à une liste, mais plutot à une référence sur une liste que je lui donne...mais je pense pas que ça change grand chose ^^


Message édité par babarpapa le 25-04-2005 à 08:29:06

---------------
http://festivaldujeu-montpellier.org/
n°1059396
pospos
Posté le 25-04-2005 à 09:46:40  profilanswer
 

[] c'est une reference vers une liste. c'est equivalent à \@a par exemple.
 
for et foreach c'est la meme chose, mais bon plus personne n'ecrit foreach ne nos jours (on dirait un vieux script CGI des années 90...)

n°1059421
babarpapa
Posté le 25-04-2005 à 10:08:21  profilanswer
 

pospos a écrit :

[] c'est une reference vers une liste. c'est equivalent à \@a par exemple.
 
for et foreach c'est la meme chose, mais bon plus personne n'ecrit foreach ne nos jours (on dirait un vieux script CGI des années 90...)


 
ok pour le foreach ^^
 
et pour la reference, oui, c'est eaxctement ça, c'est un \@a

n°1059471
pospos
Posté le 25-04-2005 à 10:43:42  profilanswer
 

donc ca corespond bien à la structure que j'ai ecrit
 
pour t'en convaincre essai de le dumper à l'ecran:

Code :
  1. use Data::Dumper;
  2. print Dumper $rh_sub_gap;

n°1060045
babarpapa
Posté le 25-04-2005 à 17:04:17  profilanswer
 

ça fonctionne nickel :)
y'a encore un tout piti pb, c'est qu'il peut arriver qu'il y ait des tableau vide... donc il me fait une erreur quand il veut faire la comparaison pour le for... y'a t ' il un moyen pour kil ne fasse la comparaison qu'avec les tableau non vides?

n°1060118
pospos
Posté le 25-04-2005 à 18:04:52  profilanswer
 

il te sort un warning ou il plante?
si c'est juste un warning (tableau existant mais vide) c'est pas bien grave. Met juste un "no warnings" au dessus et ca roule.
 
par contre si il plante c'est que le tableau n'est pas simplement vide, mais inexistant. Dans ce cas c'est à toi de faire en sorte que gap_pos se voit au moins assigner un tableau vide []
 
Sinon il y a evidemment moyen de verifier ca pendant le tri, mais ca ralentira les choses inutilement

n°1061263
babarpapa
Posté le 26-04-2005 à 14:30:56  profilanswer
 

je connaissais pas "no warnings" et evidement, ça marche ;)
merci pour tous ces tuyaux! :jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  ajouter une même valeur à tous les éléments d'un tab...[autre quest°]

 

Sujets relatifs
[C] Valeur reçue différente de la valeur retournée [Résolu]test valeur myquery...
[C] Stocker une valeur entière dans un char * [Résolu]Ajouter un certain nombre de composants lors du load de l'etat
Recuperer la valeur 0 d'un countafficher une valeur a l'ecran
Récupérer valeur textBoxAjouter un groupe à un utilisateur dans un script Unix
Cle etrangere prenant uniquement certaine valeur de la cle primaire[RESOLU] Pb d'affichage avec plusieurs éléments
Plus de sujets relatifs à : ajouter une même valeur à tous les éléments d'un tab...[autre quest°]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR