Perl怎样把hash中值相同的键合并,比如C10<=>"123",C12<=>"123"合并成“123<=>C10,C12",分不多,求高手帮忙

 我来答
百度网友e23df9c6a5
2012-05-11 · TA获得超过1082个赞
知道小有建树答主
回答量:340
采纳率:0%
帮助的人:340万
展开全部
你这个问题很简单,但是你的箭头弄的我很糊涂,比如有hash,$hash{“C10”}="123",$hash{“C12”}="123",所以你想变成$hash{“C10,C12”}="123",这样么?
那你只能手动做,每读一个新的成员,就遍历hash已读过的成员,如果值相同,就用delete删除重复的,然后重新建立新的。
具体的,你看我给你写的简单小程序吧,随便写的简单算法,没有考虑时间复杂度优化的问题:
#!/usr/bin/perl -w
use warnings;

my %hash;
for(my $i=0;$i<6;$i++)
{
$hash{"C$i"}=$i;
}
$hash{"C33"}=3;
$hash{"C55"}=5;
$hash{"C333"}=3;
foreach my $k(keys(%hash))
{printf("$k --> $hash{$k}; ");}
printf("\n");
#combine the elements which have the same value
foreach my $k1(keys(%hash))
{
foreach my $k2(keys(%hash))
{
if(exists($hash{$k1}) and exists($hash{$k2}) and $hash{$k1} == $hash{$k2} and $k1 ne $k2)
{
$hash{"$k1,$k2"}= $hash{$k1};
delete($hash{$k1});
delete($hash{$k2});
}
}
}
foreach my $k(keys(%hash))
{printf("$k --> $hash{$k}; ");}
结果为:
C5 --> 5; C0 --> 0; C33 --> 3; C4 --> 4; C1 --> 1; C3 --> 3; C333 --> 3; C55 --> 5; C2 --> 2;
C0 --> 0; C4 --> 4; C1 --> 1; C5,C55 --> 5; C333,C33,C3 --> 3; C2 --> 2;
第一排为开始的hash,有重复2次的和3次的;
第二排会合并后的。
追问
hash不能多对1的,我就想变成$hash{“C10,C12”}="123",
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
willshdanvis
2012-05-11 · TA获得超过1018个赞
知道大有可为答主
回答量:2042
采纳率:100%
帮助的人:1361万
展开全部
晕死,有那么复杂么,直接拿分走人,呵呵
#! usr/bin/perl
%hash=("c1"=>"123",
"c2"=>"1234",
"c3"=>"123",
"c4"=>"1235",
);
foreach $key(sort keys %hash){
if(exists $hash1{$hash{$key}}){
$hash1{$hash{$key}}.=",$key";}
else{
$hash1{$hash{$key}}=$key;
}
}
foreach $key(sort keys %hash1){
print "$key<=>$hash1{$key}\n";
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shenwei5566
2012-05-11 · TA获得超过610个赞
知道小有建树答主
回答量:575
采纳率:33%
帮助的人:251万
展开全部
my %hash1;
for values(%hash){
$hash1{$_} = [] if not exists $hash1{$_};
push @{$hash1{$_}}, $_;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d580670
2012-05-11 · TA获得超过1983个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:702万
展开全部
for keys(%hash){
$hash1{$hash{$_}}.=$_;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式