コメント

このコメントは、【Wiki】スクリプト/汎用関数/配列をソートするへのコメントです。

コメントの内容

            mini mosmoss(投稿日:2017/04/05 19:04/05/17)
この関数とても助かってるんですが、
配列を二次元配列aにして、a[i][0]に数値を入れて並び替えるような時、
数値の桁が違うと数値が順番にならないようです

aa=createArray()
a=createArray()
a[0]=88
a[1]=0
pushArray(aa, a)
a=createArray()
a[0]=89
a[1]=1
pushArray(aa, a)
a=createArray()
a[0]=109
a[1]=2
pushArray(aa, a)
a=createArray()
a[0]=60
a[1]=3
pushArray(aa, a)
a=createArray()
a[0]=960
a[1]=4
pushArray(aa, a)

speak(aa[0][0], aa[1][0], aa[2][0], aa[3][0], aa[4][0])
#88,89,109,60,960
aa=sortArray(aa,false)
speak(aa[0][0], aa[1][0], aa[2][0], aa[3][0], aa[4][0])
#960,89,88,60,109 #二次元配列だと数値の比較での降順にならず、文字列比較になる?ため、109が一番下に来てしまう

a=createArray()
a[0]=88; a[1]=89; a[2]=109; a[3]=60; a[4]=960
speak(a[0], a[1], a[2], a[3], a[4])
#88,89,109,60,960
a=sortArray(a,false)
speak(a[0], a[1], a[2], a[3], a[4])
#960,109,89,88,60 #一次元配列なら数値の比較で降順になる

このように、一次元配列でない時、文字列的な比較での並び替えになるようです

配列a[i][0]にスコア、a[i][1]にプレイヤー名などを入れて、
a[i][0]のスコアを並び替えてランキングを作る・・・みたいなことをしたかったので、
100以下の数値の時に、数値の前に" "を足して使ってます。
しかし、原因がよくわからないため、報告しました。

コメントの内容(一番最初の投稿)

            mini mosmoss(投稿日:2017/04/05 19:04/05/17)
この関数とても助かってるんですが、
配列を二次元配列aにして、a[i][0]に数値を入れて並び替えるような時、
数値の桁が違うと数値が順番にならないようです

aa=createArray()
a=createArray()
a[0]=88
a[1]=0pushArray(aa, a)
a=createArray()
a[0]=89
a[1]=1pushArray(aa, a)
a=createArray()
a[0]=109
a[1]=2pushArray(aa, a)
a=createArray()
a[0]=60
a[1]=3
pushArray(aa, a)
a=createArray()
a[0]=960
a[1]=4
pushArray(aa, a)

speak(aa[0][0], aa[1][0], aa[2][0], aa[3][0], aa[4][0])
#88,89,109,60,960
aa=sortArray(aa,false)
speak(aa[0][0], aa[1][0], aa[2][0], aa[3][0], aa[4][0])
#960,89,88,60,109 #二次元配列だと数値の比較での降順にならず、文字列比較になる?ため、109が一番下に来てしまう

a=createArray()
a[0]=88; a[1]=89; a[2]=109; a[3]=60; a[4]=960
speak(a[0], a[1], a[2], a[3], a[4])
#88,89,109,60,960
a=sortArray(a,false)
speak(a[0], a[1], a[2], a[3], a[4])
#960,109,89,88,60 #一次元配列なら数値の比較で降順になる

このように、一次元配列でない時、文字列的な比較での並び替えになるようです

配列a[i][0]にスコア、a[i][1]にプレイヤー名などを入れて、
a[i][0]のスコアを並び替えてランキングを作る・・・みたいなことをしたかったので、
100以下の数値の時に、数値の前に" "を足して使ってます。
しかし、原因がよくわからないため、報告しました。