アプリ版:「スタンプのみでお礼する」機能のリリースについて

宜しくお願い致します。

VB2005を使って書いてます。

内容は質問タイトル通りなのですが、配列内の格納されている数値の中で最大値を抽出し、index番号も取得したのですが、かなり考えたのですが思いつかないので、こちらで質問させていただきました。

もちろん配列内では、最大値が一つとは限らず、複数個存在する場合がありますので、該当する全てのindex番号に関しては抽出することができるようにと考えています。
後々そのindex番号を使って検索を行うことになりますので、出来ましたらそのindex番号をさらに配列に格納し、For~nextを利用して簡単に参照することが出来るように出来たら理想的なのですが・・・

どなたかお知恵を拝借させてください。

宜しくお願い致します。

A 回答 (3件)

配列のデータがすでにどこかで生成されているなら



' 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())
といった具合で ・・・
    • good
    • 0

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番号 となります。
    • good
    • 0

取り敢えず最大値は、


http://www.google.co.jp/search?sourceid=navclien …

あとは配列内を順に見ていって、同じ数値ならそのIndex番号を取得していけば
いいように思うのですが。

素人考えなので違っていたらスル~して下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!