• 締切済み

データを配列に代入し、計算を行い数の多き順に並べるプログラム。

VB2002でプログラムの勉強をしています。 国、人口、国民総所得を配列に事前代入し、それを フォームに一人あたりの所得が多い順に並び替える プログラムを作りたいと考えています。 力を貸してください。よろしくお願いします。

みんなの回答

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

VB.NETらしさを出してサンプルを作ってみました。 レコードを構造体で作っています。 クラスにしてもいいですけど、それほどのものでもないと思われたので、構造体にしました。 でも似たようなものなのでクラスで実装する場合にも参考になると思います。 sortすると昇順になりますので、 reverseしていますけど、 比較の条件を変えれば最初から降順にできます。(が、特別効率云々するのでなければデフォルトでやったほうがいいかもしれません) ソートする前の状態を残すために最初にコピーを作ってコピーでソートしています。 必要なければ直接ソートすればいいです。 '--------------------------------------------- Public Structure CountryData Implements IComparable Public countryName As String '国名 Public population As Decimal '人口 Public GNI As Decimal '国民総所得 Public Function Rate() As Decimal '一人あたりの所得 Rate = GNI / population End Function Public Function CompareTo(ByVal data As Object) As Integer Implements System.IComparable.CompareTo CompareTo = (Me.Rate()).CompareTo(data.Rate()) End Function End Structure Public Function CountryDataNew(ByVal name As String, ByVal p As Decimal, ByVal g As Decimal) As CountryData Dim o As CountryData o.countryName = name o.population = p o.GNI = g CountryDataNew = o End Function '利用する側 Dim data As CountryData() Dim sortedData As CountryData() Dim x As CountryData data = New CountryData() {CountryDataNew("日本", 1234, 456787), CountryDataNew("中国", 334445, 445355634), CountryDataNew("米国", 3322, 556666)} sortedData = Array.CreateInstance(GetType(CountryData), data.Length) data.CopyTo(sortedData, 0) Array.Sort(sortedData) '昇順にソート Array.Reverse(sortedData) '降順にする

すると、全ての回答が全文表示されます。
noname#25230
noname#25230
回答No.1

何でつまづいているのかが判りません。 ・フォームにどういう形式で表示するのがよいかが不明 ・並べ替える方法が不明 ・配列の使いかたが不明 ・そもそもぜんぜん判らない ・その他 どれでしょうか?ご質問の内容だと、完成品のソースでも貼り付けないと回答にならないと思います。

takashi2004
質問者

補足

Yamane-D様 返答ありがとうございます。質問内容が不十分で申し訳ありません。 ご指摘をもとに整理しました。 ◇分かること ・フォームの作成。 ・データをソースにいれ込むこと。 以上の2点は出来ました。 ◇不明な点 ・データの計算及び、結果(一人あたりの所得)の大きい順に表示する方法。 ◇フォームの形について 国名、総所得、人口、一人あたりの所得の順番にテキストボックスを貼り付けてあります。 よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A