我有以下子例程OutputingReorderedVectors,它的目標是按照某些預先指定的要求輸出向量。但是,代碼只是輸出空白文件。從散列結構的鍵構建數組
我覺得這個問題應該來自下面的代碼段,其中涉及重新排序從chainRollupDoc的第二級哈希鍵
my @rollupArray = sort keys %chainRollupDoc;
my @reorderedSS =();
foreach my $i(0 .. $#rollupArray)
{
foreach my $cui (sort keys %{$chainRollupDoc->{$rollupArray[$i]}})
{
push @reorderedSS, $cui;
}
}
整個子程序是在以下
#####################################
sub OutputingReorderedVectors
#####################################
{
my $centroids = shift;
my $fileName = shift;
my $chainRollupDoc = shift;
my @rollupArray = sort keys %chainRollupDoc;
my @reorderedSS =();
foreach my $i(0 .. $#rollupArray)
{
foreach my $cui (sort keys %{$chainRollupDoc->{$rollupArray[$i]}})
{
push @reorderedSS, $cui;
}
}
my %attributes =();
foreach my $category (keys %$centroids)
{
foreach my $cui (keys %{$centroids->{$category}})
{
$features{$cui} = 1;
}
}
my @fullSpace = sort keys %attributes;
open(OUTPUT, "> $fileName");
foreach my $i(0 .. $#reorderedSS)
{
printf OUTPUT "\t%s", $reorderedSS[$i];
}
print OUTPUT "\n";
foreach my $i (0 .. $#fullSpace)
{
printf OUTPUT "%s", $fullSpace[$i];
foreach my $j (0 .. $#reorderedSS)
{
printf OUTPUT "\t%f", $centroids->{$reorderedSS[$j]}->{$fullSpace[$i]};
}
print OUTPUT "\n";
}
close OUTPUT;
}
您是否使用'嚴格使用';'使用警告;'?我只用了大約20年的Perl編程,並且我知道我沒有發現他們所做的所有問題,所以我從來沒有在沒有Perl的情況下編寫Perl。 – 2012-01-01 20:35:54
直接使用數組元素而不是使用索引。例如。而不是'爲我的$ i(0 .. $#數組)'使用'我的$ elem(@array)' – TLP 2012-01-01 20:41:16
['use strict'](http://perldoc.perl.org/strict.html) ['使用警告'](http://perldoc.perl.org/warnings.html),直到你確切知道爲什麼建議這麼做。 – 2012-01-01 20:42:47