今回は、Array.sort()に渡す関数についてやります。 避けては通れない道のはずですから。 |
Array.sort()に渡す関数の基礎知識 |
基本的なものfunction(a,b){ return b-a; }これだと大きい順にソートされます。b-aをa-bにすると小さい順になります。 この関数によって返される値が 負の数ならばa,b 0ならばa,b 1ならばb,a の順に入れ替わる、といった考え方のようです(今回の実験で少し違うことがわかります)。 |
以下実験(引数はinputに入力してください) |
function Main1(n){ var a=(f=function(i,r){return i<n?f(i+1,r.push([i])):r},f(0,[])); var s=''; a.sort(function(p,q){ s+='('+p+','+q+')\n'; return 0; }); alert(s); } |
function Main2(){ var a=new Array(1,2,3,4,5,6,7,8,9); var i=0,s=''; a.sort(function(p,q){ if(i) s+=i+'回後:\t'+a+'\n'; i++; return q-p; }); alert(s); alert(a); } |
function Main3(){ var a=new Array(1,2,3,4,5,6,7,8,9); var i=0,s=''; a.sort(function(p,q){ s+=(q-p)+'\n'; return q-p; }); alert(s); alert(a); } |
function Main4(n){ var a=(f=function(i,r,n){return i<n?f(i+1,(r.push([i]),r),n):r},f(0,[],n)); var t=(f=function(i,r,n){return i<(n*(n-1)/2)?f(i+1,(r.push(Math.floor(Math.random()*3)-1),r),n):r},f(0,[],n)); var i=-1 var s='' var b=new Array().concat(a); a.sort(function(p,q){ i++; s+='('+p+','+q+'),'; return t[i]; }); alert(b+'\n'+s+'\n'+t+'\n'+a); } |
Main1とMain4において、aの初期値は0以上n未満のn個の整数を並べた配列です。 Main4において、tは-1,0,1のどれかをランダムにnC2(nコンビネーション2)個並べた配列です。 Main1は、どういう順番でソートが行われるのか(並べ替えのない場合)という実験で、 Main2は、sort()に渡された関数内で、ソート中のaの様子はどうかという実験で、 Main3は、sort()に渡された関数が返す値はどうなっているのかという実験で、 Main4は、これまでの結果を踏まえたうえで、sort()はどのように行われているのかを実験しています。 Main4の実験結果によって頭がいかれたので、これで実験は終了です。 どういう並べ方してるんでしょうか。 |
top 戻る |