+ -
当前位置:首页 → 问答吧 → 关于排序时内存占用优化问题

关于排序时内存占用优化问题

时间:2011-04-12

来源:互联网

本帖最后由 章北海 于 2011-04-12 11:09 编辑

有一个文本分析程序,我觉得排序这块占用内存比较大,哪位有好的办法推荐呢,谢谢了

需求是:

@AoA是一个二维数组
数据格式是
1,2,3
2,3,4
....

我想要计算第3列出现的次数,然后增加到第4列,方法代码如下:

#内容排序
@newAoA = sort { $a->[2] cmp $b->[2] } @AoA;

@new2AoA = @newAoA;


#内容比较计算第三列出现次数
foreach $f1 (0..$#newAoA)
{

        #当遇到新内容再比对
        if ( $newAoA[$f1][2] ne $newAoA[$f1-1][2] )
        {      

                $flag = 0;

                #确保是在同一行开始比较
                my $f11 = $f1;
        
                foreach my $f2 ( $f11..$#new2AoA )
                {

                if ( $newAoA[$f1][2] eq $new2AoA[$f2][2] )
                {
                        $flag++;
                }else{
                        $newAoA[$f1][3] = $flag;
                        last;
                }

                }
        }else{
                #和上一列内容一样则只增加计数
                $newAoA[$f1][3] = $flag;
        }
}

欢迎拍砖。

作者: 章北海   发布时间: 2011-04-12

拍砖

作者: guap514   发布时间: 2011-04-12

看不懂下面 foreach 一堆是干嘛的,计算出现次数用个 hash 不就行了。先排序什么的有必要吗?

作者: zhlong8   发布时间: 2011-04-12

my %hash;
for (@AoA) {
    $hash{$_->[2]} ++;
}

for (@AoA) {
    push @$_, $hash{$_->[2]};
}

作者: zhlong8   发布时间: 2011-04-12

撇及

作者: guap514   发布时间: 2011-04-12

回复 zhlong8


    谢谢了,我试试。

作者: 章北海   发布时间: 2011-04-12