0

列ベースのデータベースからのデータを処理するアプリケーションを構築しています。データを配列として取得しています。各配列は、データベースから返されたテーブルの列を表しています。データには、親子関係が含まれています。配列は次のようになります(各配列の同じインデックスを通常のSQLデータベースの行と同じように表示します)。

[0] empty   [1] empty   [2] ID-A  [3] ID-B  [4] ID-B <-- this represents nodes' parents  
[0] ID-A    [1] ID-A    [2] ID-B  [3] ID-C  [4] ID-D <-- this represents nodes' labels  
[0] 100     [1] 200     [3] 300   [4] 150   [4] 150  <-- this represents values associated with nodes

もちろん、それらははるかに大きいです。最大100000要素。私がやりたいのは、私が持っているデータから次のXMLを作成することです。

<root>  
   <node label="ID-A" value="300">  
      <node label="ID-B" value="300">  
          <node label="ID-C" value="150"/>  
          <node label="ID-D" value="150"/>  
      </node>
   </node>
</root>

ID-Aの場合、最上位にはエントリが1つだけあり、その値は配列内のすべてのエントリの合計であることに注意してください。

構造の深さやIDや値は事前にはわかりません。後でツリーコントロールに表示できるようにXMLを作成するにはどうすればよいですか?IDが存在しない場合はノードを追加するたびに配列を反復処理しますが、IDが存在する場合は値を更新(現在のノードに追加)するだけです。最初のレイヤーを作成することはできますが、より深い位置で適切な要素にアクセスして更新するのに問題があります。基本的に、次のことを実現するために、ID-Bの下にあるID-Eを上のXMLに追加するにはどうすればよいですか。

<root>  
   <node label="ID-A" value="300">  
      <node label="ID-B" value="300">  
          <node label="ID-C" value="150"/>  
          <node label="ID-D" value="150"/>  
          <node label="ID-E" value="sth"/>
      </node>
   </node>
</root>

それとも、私が持っている配列から子を使ってArrayCollectionを構築する方が実際には良いでしょうか?私はFlexを初めて使用するので、何がより効率的かはわかりません。

4

1 に答える 1

1

10万行をXMLに変換するのは非常に遅く、XMLは大量のメモリを消費します。これは、ツリーデータプロバイダーとして使用するだけの場合は無駄になります。ツリー内のデータを表示するためにそれを行う必要がある場合は、おそらくそれを配列に保持できますが、顧客ツリーのdataDescriptorを使用して階層を定義します。http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/Tree.html#dataDescriptor

于 2012-07-23T21:56:59.103 に答える