数据分组,归类:下面这组数据中在一行的这些字母表示有关联,怎么用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程序实现这些输出?? 展开
有一组数据:
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程序实现这些输出?? 展开
1个回答
展开全部
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询