まぁ、見た目はさほど変わらないが。
これが、キャラ数1万とか10万とかになると、結構な処理の差になるんよ。
質問者さんが最初に提示したスクリプトだと、100キャラx100キャラ の処理なんだけど。
回答してくれてるみんなのスクリプトだと、必要最低限の処理しかしてない。
作れるキャラは、100体なんだけど、それを使ってるキャラのみの処理に変えると
処理の回数が大幅に削減できるのよ。
配列比較は、競馬とかの馬券って思えばいい。(「馬連オッズ」をググってね)
1-2 1-3 1-4 とかを配列番号に置き換えて考えてみると効率がいい処理をできるかも。
下記は、モジュール化してみた。
#module
#deffunc array_same array _ap1,array _ap2
dim _Active_temp,length(_ap1),5
_Active_count = 0
repeat length(_ap1)
if _ap1(cnt) {
_Active_temp(_Active_count,0)=_ap1(cnt)
_Active_temp(_Active_count,1)=cnt
_Active_count++
}
loop
_main_loop = _Active_count - 1
_sub_loop = _main_loop
_same_count = 0
id_a = 0
repeat _main_loop
_main_cnt = cnt
repeat _sub_loop,id_a
_sub_cnt = cnt + 1
if (_Active_temp(_main_cnt,0) = _Active_temp(_sub_cnt,0)){
_ap2(_same_count,0)=_Active_temp(_main_cnt,1)
_ap2(_same_count,1)=_Active_temp(_sub_cnt,1)
_same_count++
}
loop
_sub_loop--
id_a++
loop
return _same_count
#global
kss=100;キャラの最大数
dim kya,kss;キャラの登録
dim ret,kss,2 ;同じ値の代入用(2次元配列)
;キャラの値を取得
kya(1)=3:kya(5)=3
kya(7)=8:kya(46)=8
kya(99)=13:kya(32)=13
kya(9)=8
array_same kya,ret
onaji_count = stat
mes "同じ数値があった配列数 : "+onaji_count+" 個"
repeat onaji_count
mes "["+cnt+"] kya("+ret(cnt,0)+") ≒ kya("+ret(cnt,1)+") = "+kya(ret(cnt,0))
loop
stop