tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: 点数で順位を付ける方法を教えて下さい
投稿日: 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。