- - PR -
 
重複排除のアルゴリズム
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
  | 
 投稿日時: 2007-02-01 20:55 
お世話になります。
質問ですが、下記のようなケースというものは、よくあることだと思います。 例えば、RDBから下記のような形を取得して 
 下記のツリーのように、上位の項目の重複の無い構造にしたい。 
 私自身、泥臭いべたな方法(if文のネストの連続)で変換してますが、何かスマートなアルゴリズムはありますでしょうか? ご存知でしたら、よろしくお願い致します。  | ||||||||
  | 
 投稿日時: 2007-02-01 21:33 
るぱんです。
OrderByかかってるなら、 一個前をもっておいて、 一個前と同じ場合、出力しないではダメ?  | ||||||||
  | 
 投稿日時: 2007-02-01 22:59 
総称型の宣言風に書くと、
TreeMap<年,TreeMap<組,TreeSet<名前>>>という構造でどうでしょう。 年、組、名前のそれぞれに適したComparatorを使用するといいと思います。 木構造のデータが欲しいのですか? 単にツリー風での出力が目的なら、るぱんさんの手法がベストかなと思います。  | ||||||||
  | 
 投稿日時: 2007-02-01 23:08 
私は
 ネスト階層に依存するのがネックですが。 #現在お酒が入ってるのでコードに誤りがあったらスミマセン。 #丁度こないだ同じ様なコーディングをしたのでつい・・・。 #[追記] #かつのり様とかぶりましたね・・・。むしろ若干光栄に思います(笑) [ メッセージ編集済み 編集者: SUK2 編集日時 2007-02-01 23:10 ]  | ||||||||
  | 
 投稿日時: 2007-02-01 23:28 
るぱんです。
えと、オブジェクトのプロパティにList入れてれば、何も問題おきないし、 Mapが流行ってるのかな? 汗  | ||||||||
  | 
 投稿日時: 2007-02-01 23:31 
皆様ありがとうございます。
単純なものであれば、ルパンさんのおっしゃる通り、OrderByを前提として可能なのですが、もしかして、汎用的に作れるかなとの質問でした。 結構、頻繁に出現する構造なので、OrderByや階層の深さに関係なく、コレクションか何かを与えて、再帰か何かを利用して展開できないかなぁ?と思い質問させていただいました。 やはり、データや階層に依存してしまうのでしょうかね。 以上、ありがとうございます。  | ||||||||
  | 
 投稿日時: 2007-02-02 09:22 
るぱんです。
できますよ? リフレクションでカラム名を束で取ってきて、 グルッとまわせば汎用的。 前の行と全カラムをつき合わせることが出来ます。 あとは、それをやる行の数をint[]で渡してやればよいのでは? でも、処理の負荷は高そう。笑 プロパティがいくつ以下で・・・って使用制限書いてあげないと、 ボトルネックになるかもね。 負荷テストで相当めんどくさそうだけどね。笑  | ||||||||
  | 
 投稿日時: 2007-02-02 10:31 
SELECT文でJoinしない、ってのはどうですか?
最初に「学年」テーブルをSELECT、結果セットのFORループの中で「組」テーブルをSELECT、また結果セットのFORループの中で「生徒」テーブルをSELECT。 SQLの効率的には良くないですが。  | ||||||||
1
