性格悪い人が優勝

VB2002でプログラムの勉強をしています。

国、人口、国民総所得を配列に事前代入し、それを
フォームに一人あたりの所得が多い順に並び替える
プログラムを作りたいと考えています。

力を貸してください。よろしくお願いします。

A 回答 (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) '降順にする
    • good
    • 0

何でつまづいているのかが判りません。



・フォームにどういう形式で表示するのがよいかが不明
・並べ替える方法が不明
・配列の使いかたが不明
・そもそもぜんぜん判らない
・その他

どれでしょうか?ご質問の内容だと、完成品のソースでも貼り付けないと回答にならないと思います。

この回答への補足

Yamane-D様
返答ありがとうございます。質問内容が不十分で申し訳ありません。

ご指摘をもとに整理しました。
◇分かること
・フォームの作成。
・データをソースにいれ込むこと。

以上の2点は出来ました。

◇不明な点
・データの計算及び、結果(一人あたりの所得)の大きい順に表示する方法。

◇フォームの形について
国名、総所得、人口、一人あたりの所得の順番にテキストボックスを貼り付けてあります。

よろしくお願いします。

補足日時:2004/12/21 18:30
    • good
    • 0

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