数据分组,归类:下面这组数据中在一行的这些字母表示有关联,怎么用perl实现把所有有关联的输出到一起? 5

问题:有一组数据:ABACBDEFEGXZ1:line1说明A,B具有相关性。#[A,B]line2说明A,C具有相关性。#[A,B,C]line3说明B,D具有相关性。... 问题:
有一组数据:
A B
A C
B D
E F
E G
X Z

1 :
line 1 说明 A, B 具有相关性。 # [A, B]
line 2 说明 A, C 具有相关性。 # [A, B, C]
line 3 说明 B, D 具有相关性。 # [A, B, C, D]
......

2: 把这些具有相关性的分组,归于同一个类。
[A, B, C, D]
[E, F, G]
[X, Z]

数据:
A B
A C
B D
C F
G H
G I
I J
J K
D K

输出如下:
[ A, B, C, D, F, G, H, I, J, K ]

数据:
A B
A C
B D
C F
G H
G I
I J
J K

输出如下:
[ A, B, C, D, F ]
[ G, H, I, J, K ]
怎么写一个perl程序实现这些输出??
展开
 我来答
百度网友d580670
2015-08-01 · TA获得超过1983个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:684万
展开全部

my @collect;
while (<DATA>)
{
@m = split;
my @f;
for $i(0..$#collect)
{
$e = $collect[$i];
if (exists $e->{$m[0]} ||
    exists $e->{$m[1]})
{
$e->{$m[1]} = 1;
$e->{$m[0]} = 1;
push @f, $i;
}
}
if ($#f < 0)
{
push @collect, {$m[0] => 1, $m[1] => 1};
}
elsif ($#f > 0)
{
$s = $collect[$f[0]];
for $i(1..$#f)
{
$e = $collect[$f[$i]];
for $me(keys %$e)
{
$s->{$me} = 1 if (!exists $s->{$me});
}
}
for $i(1..$#f)
{
splice @collect, $f[$i] - $i - 1, 1;
}
}
}

for $e(@collect)
{
print "[", join(",", sort keys %$e), "]\n";
}
__DATA__
A B
A C
B D
C F
G H
G I
I J
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式