关于排序时内存占用优化问题
时间: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;
}
}
欢迎拍砖。
有一个文本分析程序,我觉得排序这块占用内存比较大,哪位有好的办法推荐呢,谢谢了
需求是:
@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]};
}
for (@AoA) {
$hash{$_->[2]} ++;
}
for (@AoA) {
push @$_, $hash{$_->[2]};
}
作者: zhlong8 发布时间: 2011-04-12
撇及
作者: guap514 发布时间: 2011-04-12
回复 zhlong8
谢谢了,我试试。
谢谢了,我试试。
作者: 章北海 发布时间: 2011-04-12
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28