タイトル | : Re: 点数で順位を付ける方法を教えて下さい |
記事No | : 11316 |
投稿日 | : 2014/09/03(Wed) 15:37 |
投稿者 | : 魔界の仮面弁士 |
> ある物件、500件分の点数が配列に既に入力されています。 > Dim SC(500,2) as Single これだと、0〜500 までの「501件」ではありませんか? SC(0, x) は使用しない…ということでしょうか。
> SC(**,2)の方はまだ何も入力していない状態です。 > SC(**,0)には件名が既に入力されています。
(, 2) の「何も入力していない」は 0.0 なり、Single.NaN なりで代用できますが、 (, 0) の「件名」を As Single のデータ型で表現するのは無理があります。
データ構造を見直した方がよろしいかと。
> そこで、点数が高い順に1位、2位・・・500位と順位を付け、 > その順位をSC(**,2)に格納したいのですが、方法が判りません。
Linq を使ってみるとか。
'Linq が使えるよう、点数部分のみの 1 次元配列に変換 Dim points(500) As Single For p = 0 To 500 points(p) = SC(p, 1) Next
'ランキングを取得 Dim q = points.Select(Function(Point, Index) New With {Key Index, Point}) _ .OrderByDescending(Function(p) p.Point) _ .Select(Function(p, Rank) New With {Key p.Index, p.Point, Rank})
'ランキングを、二次元配列変数 SC に書き戻す For Each p In q 'SC(p.Index, 1) = p.Point SC(p.Index, 2) = p.Rank + 1 'ランキングは 0 位からではなく 1 位から始まるため、+1 する Next
|