- - 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