ajouter une même valeur à tous les éléments d'un tab...[autre quest°] - Perl - Programmation
Marsh Posté le 21-04-2005 à 16:21:25
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
Marsh Posté le 22-04-2005 à 11:49:38
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
Marsh Posté le 22-04-2005 à 12:03:06
il faut faire une fonction de tri
ca donnera un truc genre (non testé):
Code :
|
Marsh Posté le 22-04-2005 à 12:20:50
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 :
|
alors que le tableau se trouve là :
Code :
|
donc est ce que je peux écrire ça :
Code :
|
ça veut peut etre rien dire...
Marsh Posté le 22-04-2005 à 13:41:30
oui ca doit marcher (avec $b dans la partie droite evidemment)
Marsh Posté le 22-04-2005 à 13:50:31
ReplyMarsh Posté le 22-04-2005 à 13:55:56
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 :
|
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 :
|
Marsh Posté le 22-04-2005 à 14:00:55
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 :
|
Marsh Posté le 22-04-2005 à 14:05:27
oui, mais ecrit plutot plutot $rh_sub_gap->{$a}->[0]
Marsh Posté le 22-04-2005 à 14:06:38
ok ^^
et donc également $rh_sub_gap->{$a}{incremt} j'imagine?
Marsh Posté le 22-04-2005 à 16:52:44
ReplyMarsh Posté le 22-04-2005 à 16:57:04
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 :
|
mais ça marche pas
Marsh Posté le 22-04-2005 à 17:47:47
chez moi ca marche:
Code :
|
t'as du te gourer en ecrivant increment (incremt)
sinon j'ai rajouté les '->' pasque c'est plus correcte (mais ca marchait)
Marsh Posté le 23-04-2005 à 23:23:19
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 ^^
Marsh Posté le 25-04-2005 à 09:46:40
[] 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...)
Marsh Posté le 25-04-2005 à 10:08:21
pospos a écrit : [] c'est une reference vers une liste. c'est equivalent à \@a par exemple. |
ok pour le foreach ^^
et pour la reference, oui, c'est eaxctement ça, c'est un \@a
Marsh Posté le 25-04-2005 à 10:43:42
donc ca corespond bien à la structure que j'ai ecrit
pour t'en convaincre essai de le dumper à l'ecran:
Code :
|
Marsh Posté le 25-04-2005 à 17:04:17
ç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?
Marsh Posté le 25-04-2005 à 18:04:52
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
Marsh Posté le 26-04-2005 à 14:30:56
je connaissais pas "no warnings" et evidement, ça marche
merci pour tous ces tuyaux!
Marsh Posté le 21-04-2005 à 14:33:13
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?
Message édité par babarpapa le 22-04-2005 à 11:50:13
---------------
http://festivaldujeu-montpellier.org/