プロが教えるわが家の防犯対策術!

VBScriptで作成した配列の順番をソートする場合、どのようなコーティングを行えば、実現できるでしょうか?
ソートそのものを実装する関数がありますか?

A 回答 (2件)

簡単なものなら


シンプルソート、バブルソート
再起呼び出しなどを使えるレベルならば
マージソート、クイックソート

これらのアルゴリズムの名前で検索をかければ
プログラム例が載っているサイトがみつかりますよ。
    • good
    • 0

VBScript自体には、ソートする関数はありません。


なので、自前で実装する必要があります。
ソートして表示するのが目的ならJScriptに配列を渡してJScriptでソートすることができます。(ただしソート結果をVBScriptからは利用できません)
それなら、初めからJScriptを使うといいかもしれませんね。

とりあえず、サンプルとして作ってみました。
Sub ArraySort(a, ascending) 'ascending=0:降順,1:昇順
Dim wk, i, j, k
Dim n
n = UBound(a)
k = n \ 2
Do While (k > 0) 'シェルソート
For i = 0 To n - k
j = i
Do While (j >= 0)
If a(j) > a(j + k) Then
wk = a(j)
a(j) = a(j + k)
a(j + k) = wk
j = j - k
Else
Exit Do
End If
Loop
Next
k = k \ 2
Loop
If ascending = 0 Then '逆順にする
i = 0: j = n
Do Until (i >= j)
wk = a(i)
a(i) = a(j)
a(j) = wk
i = i + 1: j = j - 1
Loop
End If
End Sub

'テスト
Dim a, i, result
a = Array(2, 4, 21, 4, 22, 12, 3, 4)
result =""
Call ArraySort(a, 0)
For i = 0 To UBound(a)
result=result & a(i) & " "
Next
MsgBox result

a = Array("ABC", "DDE", "BCD", "FFF", "AAB", "DEEE", "DEF", "TEST")
result =""
Call ArraySort(a, 1)
For i = 0 To UBound(a)
result=result & a(i) & " "
Next
MsgBox result
--------------------------------------------------------------------
降順の場合、昇順でソートして逆順にしているので、
別に降順で初めからソートするものを作って呼び出すようにした方がいいかもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!