• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:親のIDのあるデータをツリー状に並べたい)

親のIDのあるデータをツリー状に並べたい

このQ&Aのポイント
  • データを親のIDを基にツリー状に並べたい場合、配列を利用して処理することができます。
  • ツリーを作成するために、データを適切な形式に整理する必要があります。
  • 特定のデータに対して、親データを特定する方法を使用することで、ツリー構造を作成できます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

いい方法というか、普通に親子関係を配列に入れていおいてたどればよいと思いますが... 最初のforeachで親子関係を格納した配列を作って、ハッシュから値も引けるようにしておきます。 あとは再帰的に親子関係をたどりながら結果を格納していきます。 sub convert_data { my $d = shift; my @data = @$d; my @root = (); my @child = (); my %map = (); foreach my $elm (@data) { my ($id, $parent, $content) = split(/<>/, $elm); $map[$id] = $elm; if ($parent eq '') { push(@root, $id); next; } if (!defined($child[$parent])) { my @dummy = (); $child[$parent] = \@dummy; } $ref = $child[$parent]; push(@$ref, $id); } sub push_child { my $ref = shift; my @ret = (); foreach my $id (@$ref) { push(@ret, $map[$id]); if (defined($child[$id])) { push(@ret, &push_child($child[$id])); } } return \@ret; } return &push_child(\@root); } my $nodes = &convert_data(\@data); 最近Perlを書いていないのでデータ構造はあまりエレガントではないですが。

neko173
質問者

お礼

出来ました。 ありがとうございました。 とても助かりました。

関連するQ&A