- ベストアンサー
VB2005 符号を踏まえた降順ソートについて
- VB2005入門者がhoge.txtから特定の条件で配列をソートし、最大値を求めるプログラムを作成しています。
- しかし、絶対値に置き換え符号を無視した処理しかできず、符号を考慮した処理ができません。
- どのようにプログラムを変更すれば良いのかわからないため、アドバイスを求めています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
比較用の IComparerを実装したクラスを使えば符号を無視したソートが出来ますよ Public Class myComp Implements IComparer public Funcrion Compare( byVal x as Object, byVal y as Object) As Integer _ Implements System.Collections.IComparer.Compare dim dx, dy as double dx = Math.Abs( CType(x,Double) ) dy = Math.Abs( CType(y,Double) ) Return dx - dy End Function End Class といった具合に定義しておきます テキストファイルから変うすに読み込む際には Math.Absを使わず nfMov_x(T_cont) = field(2) nfMov_y(T_cont) = field(3) nfMov_z(T_cont) = field(4) そのまま代入します ソートをする際に dim oComp as new myComp Array.Sort(nfMov_x, oComp ) Array.Sort(nfMov_y, oComp ) Array.Sort(nfMov_z, oComp ) Array.Reverse( fnMov_x ) Array.Reverse( fnMov_y ) Array.Reverse( fnMov_z ) といった具合でしょう なおmyComp.Compareの Return文の引数を dxとdyを入れ替えれば降順のソートも出来ます
お礼
早速のアドバイスありがとうございます。 教えて頂いた通りに書き直したところ うまくいったのですが、 Array.Reverse( fnMov_x ) Array.Reverse( fnMov_y ) Array.Reverse( fnMov_z ) としてしまうことで、小数点第1位以下を踏まえない結果となったため 削除し、 Return dy - dx とすることで完璧に処理できました!