配列の最大値と、その要素番号を求めるプログラムを作ってみた。
今回は二種類の方法で実装してみた。
注意が必要なのは配列要素の最初!
配列の要素番号をループさせて最大値を探していく方法
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Private Sub getMaxArray(ByVal array() As Integer) | |
Dim max_index As Integer = Integer.MinValue 'とりあえずIntegerの最小値 | |
Dim max_value As Integer = Integer.MinValue 'とりあえずIntegerの最小値 | |
For count As Integer = LBound(array, 1) To array.Length - 1 | |
If max_value < array(count) Then | |
max_value = array(count) | |
max_index = count | |
End If | |
Next | |
MsgBox("最大値は array(" + max_index.ToString + ") = " + max_value.ToString) | |
End Sub |
VBは要素番号は必ず0から始まるわけではない。
なので、ループの最初はLBound関数で配列要素の先頭を指してあげよう
たいていのプログラム言語は、配列をソートするメソッドが存在する。
ソートすると最大値と最小値が配列の両端に移動するため、
配列をソートして最大値を求める方法
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Private Sub getMaxArray2(ByVal array() As Integer) | |
Dim array_clone() As Integer = array.Clone | |
System.Array.Sort(array_clone) | |
Dim max_value As Integer = array_clone(UBound(array)) '最大値 | |
'Dim min_value As Integer = array_clone(LBound(array)) '最小値 | |
Dim max_index As Integer = System.Array.IndexOf(array, max_value) | |
MsgBox("最大値は array(" + max_index.ToString + ") = " + max_value.ToString) | |
End Sub |
ソートすると最大値と最小値が配列の両端に移動するため、
コード上でループさせず配列の先頭or末尾を参照すれば最小値または最大値がわかる。
注意が必要のはソートすると元の配列の順番が変わってしまう点
なので、.Cloneで元配列をシャローコピーして、コピー配列にソートを掛ける必要がある。
最後にコピー元の配列から最大値の配列番号をindexOfメソッドで持ってきて完了!
なので、.Cloneで元配列をシャローコピーして、コピー配列にソートを掛ける必要がある。
最後にコピー元の配列から最大値の配列番号をindexOfメソッドで持ってきて完了!
0 件のコメント:
コメントを投稿