• ベストアンサー

VBScriptで配列のソートをするには?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • akekou
  • ベストアンサー率19% (12/63)
回答No.2

簡単なものなら シンプルソート、バブルソート 再起呼び出しなどを使えるレベルならば マージソート、クイックソート これらのアルゴリズムの名前で検索をかければ プログラム例が載っているサイトがみつかりますよ。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

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 -------------------------------------------------------------------- 降順の場合、昇順でソートして逆順にしているので、 別に降順で初めからソートするものを作って呼び出すようにした方がいいかもしれません。

関連するQ&A