假设我生成了一些随机字母表和随机数
A 1
Z 2
C 3
L 2
E 4类似地,另一组
1 K
4 I
2 P
5 R
6 S
7 U现在我们可以发现,在第一种情况下,2链接到Z和L,类似地,2链接到第二个集合中的P,从这里我们可以说Z和L连接到P,所以我已经生成了前两个步骤。我有点困惑,如何继续rest?
发布于 2012-04-26 05:27:25
如果您更熟悉SQL而不是perl,那么只需推荐一种非常不同的方法,这种方法可能更容易考虑,您可以研究DBD::CSV。然后,您可以使用一个简单的join语句来完成您想要的操作。只需遵循链接页面上的示例即可。如果您不了解SQL,那么您最好使用已发布的数组散列。当我到达一个安装了DBD::CSV的机器时,我会发布实际的代码...
发布于 2012-04-26 07:41:14
也许您需要的是所有的关系,就像您向我们展示的那样?
下面是一个执行此操作的示例程序。如果你需要不同的东西,请解释一下。
use strict;
use warnings;
my %data1 = qw(
A 1
Z 2
C 3
L 2
E 4
);
my %data2 = qw(
1 K
4 I
2 P
5 R
6 S
7 U
);
# Convert to arrays indexed by the numbers
#
my @data1;
push @{ $data1[$data1{$_}] }, $_ for keys %data1;
my @data2;
push @{ $data2[$_] }, $data2{$_} for keys %data2;
# Find all the mappings between the datasets
#
for my $i (0 .. $#data1) {
my $data1 = $data1[$i] or next;
my $data2 = $data2[$i] or next;
print "@$data1 => @$data2\n";
}输出
A => K
Z L => P
E => I发布于 2012-04-26 05:51:59
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my (@n,@s);
sub generate_random_string
{
my @chars=('a'..'z');
my $random_string;
$random_string.=$chars[rand @chars];
return $random_string;
}
print "one\n";
foreach(1..5)
{
my $range = 10;
my $random_number = int(rand($range));
push (@n,$random_number);
my $random_string=&generate_random_string;
push(@s,$random_string);
print $random_number." ".$random_string."\n";
}
my (@nn,@ss);
print "two\n";
foreach(1..6)
{
my $range = 10;
my $random_number = int(rand($range));
push (@nn,$random_number);
my $random_string=&generate_random_string;
push(@ss,$random_string);
print $random_number." ".$random_string."\n";
}
my %h1;
# prepare data
for (my $i=0;$i<=$#n;$i++)
{
$h1{$i}{'a'}=$s[$i];
$h1{$i}{'i'}=$n[$i];
}
my %h2;
for (my $i=0;$i<=$#nn;$i++)
{
$h2{$i}{'a'}=$ss[$i];
$h2{$i}{'i'}=$nn[$i];
}
# end prepare data
my %result;
foreach (keys %h2)
{
my $letter=$h2{$_}{'a'};
my $number=$h2{$_}{'i'};
my @rarr;
foreach (keys %h1)
{
if ($h1{$_}{'i'}==$number)
{
push(@rarr,$h1{$_}{'a'});
}
}
if ($#rarr>=0)
{
@{$result{$letter}}=@rarr;
}
@rarr=undef;
}
foreach (keys %result)
{
print join(',',@{$result{$_}})." connected to ".$_."\n";
}结果:
one
8 s
2 g
6 z
7 g
7 a
two
7 e
8 w
3 r
1 c
0 t
7 h
a,g connected to e
s connected to w
a,g connected to hhttps://stackoverflow.com/questions/10323222
复制相似问题