- 締切済み
配列内で最大値を検索し、その値とindexを保管するにはどのようにしたらいいでしょうか??
宜しくお願い致します。 VB2005を使って書いてます。 内容は質問タイトル通りなのですが、配列内の格納されている数値の中で最大値を抽出し、index番号も取得したのですが、かなり考えたのですが思いつかないので、こちらで質問させていただきました。 もちろん配列内では、最大値が一つとは限らず、複数個存在する場合がありますので、該当する全てのindex番号に関しては抽出することができるようにと考えています。 後々そのindex番号を使って検索を行うことになりますので、出来ましたらそのindex番号をさらに配列に格納し、For~nextを利用して簡単に参照することが出来るように出来たら理想的なのですが・・・ どなたかお知恵を拝借させてください。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
配列のデータがすでにどこかで生成されているなら ' arDataが元データ dim arIndex() as Integer Array.Resize( arIndex, arData.Length) for n as integer = 0 to arData.Length -1 arIndex(n) = n next ' インデックスもソートする Array.Sort( arData, arIndex ) dim nMax = arData( arData.Length - 1 ) ) dim sb as new System.Text.StringBuilder for n = arIndex.Length-1 to 0 step -1 if arData( n ) = nMax then if sb.Length<> 0 then sb.Appned(",") endif sb.Append( "{0}", arIndex(n) ) else exit for end if next ' 元に戻す Array.Sort( arIndex, arData ) MessageBox.Show( String.Format("最大値:{0}, Index:{1}", nMax, sb.ToString()) といった具合で ・・・
- Hayashi_Trek
- ベストアンサー率44% (366/818)
ArrayList を使うと楽に処理できます。 サンプルソース(インデントのために.を挿入) (普段、VB.NETは使わないので文法エラーが有るかも) Dim objVal(9999) As Integer '検索対象の配列 Dim arrVal As ArrayList '戻り値のアレイ Dim maxVal As integer '最大値 Dim idx As Integer ' ・ ・ ・ maxVal = -99999999 '最大値の初期値 For idx = 0 To 9999 ..If maxVal < objVal(idx) Then ....'新たな最大値 ....arrVal = new ArrayList() ....maxVal = objVal(idx) ....arrVal.Add(maxVal) ..End If ..If maxVal = objVal(idx) Then ....'最大値のindexを格納 ....arrVal.Add(idx) ..End If Next idx ・ ・ ・ Return arrVal とすれば、arrValの最初の要素は最大値、 以降の要素はindex番号 となります。
- n-jun
- ベストアンサー率33% (959/2873)
取り敢えず最大値は、 http://www.google.co.jp/search?sourceid=navclient&aq=t&hl=ja&ie=UTF-8&rls=GGLG,GGLG:2005-51,GGLG:ja&q=vb+%e9%85%8d%e5%88%97+%e6%9c%80%e5%a4%a7%e5%80%a4 あとは配列内を順に見ていって、同じ数値ならそのIndex番号を取得していけば いいように思うのですが。 素人考えなので違っていたらスル~して下さい。