Hi Sir,
I have the following problem, which I really don't know
how to deal with it. Look at my hopeless code:
# col1 col2 index
my $sample1 = ['str1 str2 1',
'str3 str4 2',
'str5 str6 3',
'str7 str8 4',
'str9 str10 5'];
my $sample2 = ['str1 str2 0',
'str3 str4 4'];
my $sample3 = ['str1 str2 3',
'str3 str4 4'];
The intended result for each sample is like this:
$result_spl1 = [
'str1',
'str3',
'str5',
'str7',
'str9',
'str10'
];
$result_spl2 = [
'str1',
'str2',
'str3',
'str4',
];
$result_spl3 = [
'str1',
'str3',
'str4',
];
The flow/logic of the algo is like this:
In each sample
- If the index difference of two consecutive sample is 1
take the first colum of the first string PLUS
the 2nd column - last one- of the last string.
- If the difference of two consecutive sample is >1
take all the colum in between
What's wrong with my code below? Such that I still can't get those result? How can I fix it?
Is there a better way to achieve the result than
my approach:
use Data::Dumper;
get_column($sample1);
sub get_column
{
my $ar = shift;
my $all;
foreach my $str ( @{$ar} )
{
my @ar = (split " ",$str)[0,1,2];
push @$all, [ @ar ];
}
my @clean;
my $flag = $all->[0][2]+1;
my $idx;
my $diff;
push @clean, $all->[0][0],$all->[0][1];
foreach my $i ( 1 .. @$all-1 )
{
$idx = $all->[$i][2];
$diff = abs($idx-$flag);
if ( $diff == 1 )
{
push @clean, $all->[$i][1];
}
else
{
push @clean, $all->[$i][0],$all->[$i][1];
}
$flag = $idx;
}
print Dumper \@clean ;
return ;
}
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.