VB.NETでのソートについて

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。

ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。

尚、以下は本サイトの最新情報(ブログ)です。

それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。

◆ VB.NETでのソートについて

VB6での配列または構造体配列のソートは、ロジックでルーチンを組む必要がありました。

しかも、構造体配列のソートは、構造体毎に別ルーチンで作るより他なく、汎用性がありませんでした。

しかし、VB.NETでは、ArrayクラスのSortメソッドで汎用的にソートを実現できます。

その汎用的ソートの仕組みですが、これが結構、複雑です。


まず、VB.NETでは数値型や文字列型の変数は、実は、すべてオブジェクトです。

したがって、メソッドを持つことが可能です。

実際、それらは、IComparableインターフェイスを実装したCompareToメソッドを持っています。

CompareToメソッドは、自オブジェクトと引数で指定された他オブジェクトを大小比較してその結果を返します。


一方、ArrayクラスのSortメソッド内部では、CompareクラスのCompareメソッド(CompareToでない)を比較ルーチンとして使用します。

このCompareメソッドは、引数が2つのオブジェクトで、その2つを大小比較してその結果を返します。

オブジェクト2つの大小比較は、片方のオブジェクトが持つCompareToメソッドに、もう片方のオブジェクトを引数にして呼び出すことにより、大小比較を行い、その結果を返します。

したがって、ソートするオブジェクトのCompareToメソッドを独自に実装すれば、任意のソートが可能なのです。


また、Sortメソッドの第2引数に独自のCompareメソッドを持つオブジェクトを指定することも出来ます。

すると、デフォルトのCompareクラスのCompareメソッドと置き換わり、任意のソートが可能なのです。

尚、独自のCompareメソッド内部では、CompareToメソッドを使用する必要はないです。


ということで、上記の様に、オブジェクト配列内を独自にソートするには2通りあります。

  1. Sortメソッドは第1引数のみで、ソートする配列内のオブジェクト達に独自のCompareToメソッドを実装する方法。
  2. Sortメソッドは第2引数に独自のCompareメソッド(ICompareインターフェイス実装)を持つオブジェクトを指定する方法。

詳しくは、以下を熟読してください。

尚、上記は独自な比較ルーチンが必要な場合で、普通に数値順や文字コード順ならSortメソッドの第1引数にオブジェクト配列を指定するだけです。

おわりに

以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。