----- Original Message ----- From: "Rob Dixon" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Monday, February 23, 2004 3:30 PM Subject: Re: how to push a double dimensional array
> Öznur tastan wrote: > > > > "Rob Dixon" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > > > > > > Öznur tastan wrote: > > > > > > > > I want to store alignment results( that is why I asked about struct yesterday). > > > > I thougt that I could just push seq1 seq2 and the score to an array and can > > > > acess them by using $k*3 + $n ($n=0 for seq1 $n =2 for score) > > > > > > > > But I also have a sort of grouping of the alignment which is denoted by $p. > > > > So I wanted to use a matrix so in each row I would have one group (group index > > > > is $p) and in that row alignments features(seq1 seq2 score) > > > > > > > > I tried this: > > > > > > As Joseph pointed out in your other thread, using a variable name like $p > > > isn't very informative. If I didn't know better I would guess that it may be > > > a pointer (but those are called 'references' in Perl) but couldn't > > > guess beyond that. What's wrong with $index? > > > > > > > $p=0; > > > > $seq1="A--V"; > > > > $seq2="AAAV"; > > > > $score=-5; > > > > > > > > [EMAIL PROTECTED]; > > > > push @$ref,$seq1; > > > > push @$ref,$seq2; > > > > push @$ref,$score; > > > > > > > > when use this way it gives the error "Not an array reference". > > > > > > @subalignments[$p] is an array slice with one element, so [EMAIL PROTECTED] > > > is a list of one scalar reference. Assigning this list to the scalar $ref > > > copies the last (and only) element of the list, so $ref is now a reference > > > to the scalar array element $subalignments[$p]. > > > > then is there a way to push an element to one of the arrays of a double-dimensional array? > > Yes. > > A Perl two-dimensional array is an array of array references. You can do this: > > push @{$subalignments[$p]}, $seq1; > push @{$subalignments[$p]}, $seq2; > push @{$subalignments[$p]}, $score; > > > > > I think I should declare the-two dimensional array so i thought adding > > > > $subalignments[0][0]=0 (silly I know) would work- didn't work:) > > > > > > There's no need to predeclare arrays in Perl, just use an array as if was > > > two-dimensional and it will be. So: > > > > > > $subalignments[$p][0] = $seq1; > > > $subalignments[$p][1] = $seq2; > > > $subalignments[$p][2] = $score; > > > > > > or > > > > > > $subalignments[$p] = [$seq1, $seq2, $score]; > > > > > > does the same thing. But I think perhaps you should be using a hash here: > > > > > > $subalignments[$p] = { > > > seq1 => $seq1, > > > seq2 => $seq2, > > > score => $score, > > > }; > > > > Yes that certainly is better. But $subalignments[$p] should be an array of hashes because > > I want to hold the alignment group there. > > > > $subalignments[$p][$groupindex] = { > > seq1 => $seq1, > > seq2 => $seq2, > > score => $score, > > }; > > > > would work but holding the $groupindex for each group is tedious so > > I need the push the hashes into an row of the double dimensional array > > (row would be array of hashes). How would that be? > > I'm losing track again here. /Please/ post a comprehensive example of > your actual data. My best guess is that you should have a hash of hashes: > > $subalignments{$groupindex} = { > seq1 => $seq1, > seq2 => $seq2, > score => $score, > }; Well actually i don't know how to be more clearer. ok each alignment has three features :$seq1,$seq2,$score An example of an aligment AADALLL - - EVLLL score:12 say I have 15 alignments (the numbers and distributions can be change wıth different inputs) 3 of them belong to first group 4 of them second belong to 2nd group. 5 of them belong to 3rd 2 of them belong to 4th 1 of them belong to 5th) so how to store them group by group. thanks. > but I'm not at all clear on what $p is (hence my comment on useless > variable names) and what sort of values $groupindex can have. > > These things are so important that I'll go through them again: > > - Please add > > use strict; > use warnings; > > to any program you write, and especially anything you want help with. > > - Please use descriptive variable names throughout. Funnily enough I've > seen plenty of > > %hash > > and > > @array > > but never a > > $scalar > > - Please give us sight of the data you're trying to process. > > With these we can help, but without them it's like trying to > build a treehouse while looking through a magnifying glass. > > Rob > > > > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > <http://learn.perl.org/> <http://learn.perl.org/first-response> > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>