2016-07-07 5 views
0

totalScoreを1つのプロパティとして含むオブジェクトのリストがあります。チームのトータルスコアに応じてチームのランクを取得したいと思います。リストデータ=新しいリスト();いくつかの条件によってオブジェクトのリストからランクを取得

このように、データには合計スコアプロパティを持つscoreboardクラスのオブジェクトが含まれています。 私はtotalscoreに応じてチームのランクを必要としています。ここでは試してみましたが、ランク= 1,2,2,3のような結果が出ますが、ランク= 1,2,2,4が必要です。

data.OrderByDescending(x => x.totalScore).GroupBy(x => x.totalScore) 
    .SelectMany((g, i) => g.Select(e => new { data = e.Rank = i + 1 })) 
    .ToList(); 

データリストは、独自のチームを含んでいますが、合計スコアが同じため、同じtotalscoreチームが1つのランクであることが必要があるかもしれません。私を助けてください!

+0

私が誤解しているとお詫び申し上げますが、あなたがデザインしたいのは、(合計得点に基づいて)ランク別にリストを並べ替える方法です。しかしながら; 2つのチームがスコアで結ばれている場合、それらはランク(例えば2位)を共有しなければならず、チームは3位になりませんか?同じスコアを持つチームがない場合、順番は正しいでしょうか? – mtaanquist

+0

2つのチームが同じ得点を持つことができます。t1 = 100、t2 = 100、t1 = 50の場合ランク= 1,1,3 – User1710

答えて

2

あなたはその場でリストを更新する必要がある場合:

int i = 0; 
decimal? prevValue = null; 
foreach(var item in data.OrderByDescending(x => x.totalScore)) 
{ 
    item.Rank = prevValue == item.totalScore ? i : ++i; 

    prevValue = item.totalScore; 
} 
+0

フロントエンドでデータリストを送信する必要があり、ボードクラスどのように私はこのランクを割り当てる必要がありますか?ランク= 1,2,2,4のような結果を与えるでしょうか? – User1710

+0

あなたはリストを別の変数としてランクを送信していますが、私は同じリストにランクを送る必要があります。 – User1710

+0

@KrishnaChavan今すぐ編集を確認してください。 – user3185569

0

異なる表記(私は読みやすくするために好むもの)が、user3185569によって提供されるように、本質的に同じ答え。

var i = 1; 
var results = (from d in data orderby d.totalScore descending select new { Obj = d, Rank = i++ }).ToList(); 
関連する問題