2011-12-23 12 views
3

私たちは、このような既知のサイズのテーブルを表す入力値があるとします。エレガントかつ効率的な方法

- a b c 
x 06 07 08 
y 10 11 12 
z 14 15 16 

が、値がアップで、ストリーム/イテレータまたは他のシリアル形式から到着しているがダウン、左から右へ順:

- a b c x 06 07 08 y 10 11 12 z 14 15 16 

は、データがnewVal = provider.getNext()のようないくつかのプロバイダから到着し、我々は逆方向に行くことができないと仮定します。

3つの構造に入ってくるデータを置くために(prefferオブジェクト指向)最もエレガントかつ効率的な方法は何ですか:

top : 0=>a 1=>b 2=>c 
left: 0=>x 1=>y 2=>z 
data: 0,0=>06 1,0=>07 2,0=>08 
     0,1=>10 1,1=>11 2,1=>12 
     0,2=>10 1,2=>11 2,2=>12 

いくつかのスイッチ/デリゲートを使用するか、または単にすべてのデータと抽出部分をバッファする方が良いだろう(すべての値が同じタイプのを持っていると仮定し、整数と言うことにします)?

リアルタイムで適切な構造のデータを収集する必要はないと仮定します(データ全体をバッファリングすることができますが、私は効率的なソリューションを探します)。

この問題の現実世界のデータは、サイズが約500x500の3倍の「マップ」で、重要な場合は.xlsファイルから読み込まれます。

答えて

0

優雅さと効率性は、あなたがデータに対して実行しようとしているタスクによって異なると思います。 一般的には、最も効率的な方法は、データを生の形式(例えば060708101112141516)で保存し、要素のサイズが一定であり、 'columns'の量を知っていると仮定すると、ポインタを取得することは常に可能です座標(行/列の名前または番号)を知っているすべての要素に渡します。 各トリプルマップは、そのようなデータブロックから取得することもできます。

しかし、あなたの仕事が指標によって要素を得ることと異なる場合、実現は異なるかもしれません。