- - PR -
構造体配列のソートの仕方
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-03-09 16:12
初めましてきゅきゅ〜と言います。
最近 VB.NET2003を使ってます。 構造体配列を使用して複数キー指定でソートをしたいのですが データベースでいう Order bみたいな事です。 ヘルプ等や他の掲示板見ても載ってなくて困っています。 (載っていてもよく解りません) 誰かご存知の方、教えて頂けないでしょうか。 宜しくお願いします | ||||
|
投稿日時: 2004-03-09 17:43
これだけの情報では、おそらく他の掲示板のように、よくわからない回答しかできません。 例えばこの質問内容だと、「福岡に行きたいのですが、いろいろ調べてみたのですがわかりません。行き方を教えてください」と同じレベルです。どこから出発するのか、予算はどれくらいなのか、いつまでに着かなければならないのか、そういう具体的なことがわからなければ、回答のしようがない/または無意味な回答になりますよね?
最低でもこれくらいの情報をください。 | ||||
|
投稿日時: 2004-03-09 17:52
たとえば、ソートする項目が3つある場合、これを優先度順にA,B,Cとして
1) Aをソート 2) Aの同順の要素の範囲を見つけBでソート 3) Bの同順の要素の範囲をみつけCでソート が、一番単純でわかりやすいかと。 他に効率のいい方法があるかはわかりませんが・・・。 -------------- あれ?全然違う事を言われてます? [ メッセージ編集済み 編集者: 弟子 編集日時 2004-03-09 19:01 ] | ||||
|
投稿日時: 2004-03-09 17:54
IComparerインターフェースを実装したオブジェクトを作ってみてはどうでしょう。
で、ArrayのstaticメンバのSort()でソートする。 やったことはありませんけど、できると思います。 ------------- と書いて、話が続くのかもう少し噛み砕かなければいけないのか分からない、ってことですね、Jittaさんのおっしゃっていることは。 [ メッセージ編集済み 編集者: 一郎 編集日時 2004-03-09 18:22 ] | ||||
|
投稿日時: 2004-03-09 20:39
そうです。ヘルプをみたということは、IComparableインタフェースのヘルプもみているなら、単純な比較の例は載っていてたでしょう。それが理解できなかったのか、それとも対象が3つあるケースに応用できなかったのか、はたまたそのヘルプに行き当たらなかったのか。。。 行き当たっていなかったのなら、そのヘルプだけ示せばわかるのか、それとも処理手順まで書かなければいけないのか、あるいはプログラム例を作らなければいけないのか、そのプログラム例もこちらが動作確認までしなければいけないのか。。。 ふざけているようですが、まじめに、「何がわからないのか、わかりません」 | ||||
|
投稿日時: 2004-03-10 08:35
例えば、一郎さんのおっしゃっているIComparableインタフェースは、他のオブジェクトと比較するためのCompareToメソッドを定義します。これは、引数で渡されたオブジェクトと、自分自身を比較し、自分の方が小さければ負の値、同じならば0、自分の方が大きければ正の値を返します。 このため、Aでソート後に「同じ並びの範囲」を探すのではなく、CompareToメソッドで、
ように作ると、効率的、というか、そう作ります。 で、元の質問の方ですが、「構造体」というのが気になるのですが、structでなければならないなら、構造体と、それと同じ構造のクラスと、そのクラスのコレクションの3つを定義し、コレクションクラスに「構造体の配列を返す」メソッドを定義すればよいかと。 | ||||
|
投稿日時: 2004-03-10 09:40
えーと、私が書いてるのはIComparerです。 複数キー指定でソートというのが、その時その時でソートするために見る項目を変えるという意味なら、IComparableで比較の仕方を固定で持たせるわけにはいきませんよね。 | ||||
|
投稿日時: 2004-03-10 10:01
ちょっと質問なんですが、クラスを〜と仰っているのはなぜなんでしょう? 構造体配列のソートは(場合によっては)効率が悪いかもとか、インスタンスの関係に注意が要るかもとか、以外に何かありましたっけ? |