Dripです。
ひーよーこーさん、こんにちは。
恐らくひーよーこーさんが考えているのは、楽な最大値取得というより
高速な最大値の取得方法だと思います。
数十個の配列であればrepeat-loopでひとつずつ比較していく方法で問題ないと思いますが、
大量の配列を持つ変数だった場合、特にゲームプログラム等でリアルタイム処理が
要求される場合は、最大値ひとつ求めるのにかなりの処理時間がかかってしまい、
問題がありますね。
高速に最大値を求める手段は2つほど思いつきます。
まず1つ目はhspda.dllというHSP3に標準装備されたプラグインを使うことです。
以下にhspda.dllを使用した簡単な最大値取得のサンプルを示します。
#include "hspda.as"
randomize:pos 10,10
repeat 20:x(cnt)=rnd(100):mes ""+cnt+": "+x(cnt):loop
sortval x,1:sortget t,0 //ソートして最大値と元のIndex取得
pos 200,50:mes "最大値:配列 "+t+" の "+x(0)+" が最大"
//但し、この方法ではデータが全てソートされてしまいます!
こちらの環境ではこの方法で一千万件のデータを1.579秒で処理し、最大値を
取得できました。しかし、見てわかる通り、途中でソート処理が挟まれているため、
無駄な処理が多すぎることも確かです。
更に高速に最大値を求める手段の一つとしてネイティブコードを扱う方法が考えられます。
こちらはC言語がわからないとサンプルを理解するのは難しいですが、試しに下のコードを
実行してみて下さい。
#module
#uselib "kernel32.dll"
#func VP "VirtualProtect" var,int,int,var
#defcfunc maxget array ary
if mc=0:{VP mc,44,$40,NL
mc.0=$53ec8b55,$08458b56,$088bf633,$553bd233,$8b137d0c
mc.5=$7dcb3b18,$8bcb8b04,$c08342f2,$0c553b04,$c68bed7c
mc.10=$c35d5b5e:mcp=varptr(mc)
}:prm=varptr(ary),length(ary):return callfunc(prm,mcp,2)
#global
randomize:pos 10,10
repeat 20:x(cnt)=rnd(100):mes ""+cnt+": "+x(cnt):loop
t=maxget(x)
pos 200,50:mes "最大値:配列 "+t+" の "+x(t)+" が最大"
こちらの環境では、このmaxget関数を利用した場合、
一千万件のデータを約0.03秒で処理し、最大値を取得することができました。
これならば一般的なゲームアプリケーションでフレーム毎の使用にも耐えることができます。
私が上げたサンプルは、あまりに配列数が多すぎてとてもHSPで処理するには重過ぎる、
という場合に使用される方法ですので、通常はrepeat-loopで最大値を一件一件検索して
行く方法で十分です。
用途に合わせ、最大値の取得方法を考えてみてください。