1

PerlGraphVizモジュールを使用して依存関係ツリーグラフを作成しています。クラスAとクラスBの2つのクラスがあるとします。クラスAのすべてのノードを1つのクラスターにし、クラスBのすべてのノードを別のクラスターにします。

Perlでは、各ノードのクラスを取得し、次の行に沿って何かを実行します。

if ($currentClass ne $lastClass) {
    $classCluster = {name => "class B"};
}
else {
    $classCluster = {name => "class A"};
}

$graph->add_node($currentNode, cluster => $classCluster);

ただし、これでは望ましい結果が得られないようです。すべてのノードが正しくグラフ化されているグラフを作成しますが、適切なクラスターに割り当てられているのではなく、クラスターの一部ではないように見えます。また、「クラスA」と「クラスB」もグラフに表示されますが、その中にノードはありません。

つまり、ノードをクラスターに動的に割り当てようとしています。どうすればそれを達成できるかアイデアはありますか?ありがとう!

4

1 に答える 1

2

モジュールはわかりませんがGraphViz、問題は、同じクラスターを定義するために複数の匿名ハッシュを作成していることだと思います。

Perl が実行されるたび{name => "class B"}に、新しいハッシュが作成されるため、たまたま同じ名前を持つノードごとに新しいクラスターが作成されます。

書いてみることをお勧めします

my $clusterA = { name => 'Class A' };
my $clusterB = { name => 'Class B' };

メインループの外側で、示したコードを次のように置き換えます

if ($currentClass ne $lastClass) {
    $cluster = $clusterB;
}
else {
    $cluster = $clusterA;
}

$graph->add_node($currentNode, cluster => $cluster);

より良い結果が得られるはずです。

クラスター A とクラスター B のどちらを選択するかが気になります。この方法では、クラスター A のクラスが前のノードのクラスと異なる場合を除き、すべてがクラスター A に入りますが、それは正しくないようです。しかし、あなたのプログラム、特にデータの性質とグラフにノードを追加するループを見ないと、適切に判断できません。

于 2012-11-19T03:39:37.943 に答える