Perl-使用唯一键[group]获取项的总和
比如说 由此: UserA |单身|少女| 200 | 500 UserA |单身|孩子气| 200 | 200 UserA | Double | Girly | 100 | 200 UserA |多个|孩子气| 200 | 400 UserA | Double | Girly | 250 | 150 UserA |单身|孩子气| 150 | 150 为此: UserA |单身|少女| 200 | 500 UserA |单身|孩子气| 350 | 350 UserA | Double | Girly | 350 | 350 UserA |多个|孩子气| 200 | 400 我应该如何对其进行编码,以便通过相同的键获得行的和。 你从我的例子中得到了基本的想法Perl-使用唯一键[group]获取项的总和,perl,grouping,Perl,Grouping,比如说 由此: UserA |单身|少女| 200 | 500 UserA |单身|孩子气| 200 | 200 UserA | Double | Girly | 100 | 200 UserA |多个|孩子气| 200 | 400 UserA | Double | Girly | 250 | 150 UserA |单身|孩子气| 150 | 150 为此: UserA |单身|少女| 200 | 500 UserA |单身|孩子气| 350 | 350 UserA | Double | Gir
谢谢 使用前几个字段的串联键创建2个散列来存储总和$总数{'UserA | Single | Boyish'}+=$value{u 1;下一次当你发布一个问题时,如果你不想被否决,请尝试做一些事情,并发布你所做的代码。另外,如果你的问题符合你的问题要求,请接受它的答案。我只是忘了更新这个线程。我已经解决了我的问题,我只是做了一个唯一的键,将用户与他们的状态分组,这样我就可以将以前的值附加到新值中。
use strict;
use warnings;
my %hash;
while(my $line = <DATA>)
{
chomp $line;
if ($line =~ /(.*\|.*\|.*)\|(\d*)\|(\d*)/)
{
# you want to group them by the first 3 attributes, therefore:
# 1 will hold UserA|Single|Girly
# 2 will hold the first value
# 3 will hold the second value
$hash{$1}{'first_value'} += $2;
$hash{$1}{'second_value'} += $3;
}
}
use Data::Dumper;
print Dumper %hash;
__DATA__
UserA|Single|Girly|200|500
UserA|Single|Boyish|200|200
UserA|Double|Girly|100|200
UserA|Multiple|Boyish|200|400
UserA|Double|Girly|250|150
UserA|Single|Boyish|150|150
$VAR1 = 'UserA|Multiple|Boyish';
$VAR2 = {
'first' => '200',
'second' => '400'
};
$VAR3 = 'UserA|Double|Girly';
$VAR4 = {
'first' => '350',
'second' => '350'
};
$VAR5 = 'UserA|Single|Boyish';
$VAR6 = {
'first' => '350',
'second' => '350'
};
$VAR7 = 'UserA|Single|Girly';
$VAR8 = {
'first' => '200',
'second' => '500'
};