• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB2005 符号を踏まえた降順ソートについて)

VB2005 符号を踏まえた降順ソートについて

このQ&Aのポイント
  • VB2005入門者がhoge.txtから特定の条件で配列をソートし、最大値を求めるプログラムを作成しています。
  • しかし、絶対値に置き換え符号を無視した処理しかできず、符号を考慮した処理ができません。
  • どのようにプログラムを変更すれば良いのかわからないため、アドバイスを求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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を入れ替えれば降順のソートも出来ます

npupu
質問者

お礼

早速のアドバイスありがとうございます。 教えて頂いた通りに書き直したところ うまくいったのですが、 Array.Reverse( fnMov_x ) Array.Reverse( fnMov_y ) Array.Reverse( fnMov_z ) としてしまうことで、小数点第1位以下を踏まえない結果となったため 削除し、     Return dy - dx とすることで完璧に処理できました!

関連するQ&A