私は以下のリストを持っています。リストは名前とスコアのリストで構成されています。C#でのLinqリストランキング
Name Score
Ed 5
John 6
Sara 7
Dean 3
Nora 4
だから私は、リストのグループすることができたとの合計を作るが、今私はに基づいてこれらをランク付けしようとしています:私はpeopeのリストのためのポイントの合計を取得するためにLINQを使用することから得た得点スコア。だから私は、以下のリストを取得しようとしています:
Rank Name Score
1 Sara 7
2 John 6
3 Ed 5
4 Nora 4
5 Dean 3
をしかし、私は使用していますLINQのコードは私のために右のランクを取得していないようです。私は、LINQで正しいランクを含める方法をお知りになりたい
public class Person
{
public int Rank { get; set; }
public string Name { get; private set; }
public int Score { get; set; }
public Person(int rank, string name, int score)
{
Rank = rank;
Name = name;
Score = score;
}
}
public ObservableCollection<Person> Persons { get; set; }
public MainWindow()
{
Persons = new ObservableCollection<Person>();
var data = lines.Select(line => {
var column = line.Split(',');
var name = column[0];
int score = int.Parse(column[1]);
int rank =0;
return new { name, score, rank };
});
var groupedData = data.OrderByDescending(x => x.score).GroupBy(p => p.name).Select((g, i) => new { name = g.Key, rank=i+1, score = g.Sum(p => p.score)});
var persons = groupedData.Select(p => new Person(p.rank, p.name, p.score));
foreach (var person in persons) {
Persons.Add(person);
}
datagrid.ItemsSource = Persons;
}
:
は、ここでリストを作成し、合計を作るとランキングのために私のコードです。
挨拶:ここ
は私の質問と解決策でした。私はあなたの提案した解決策を試しましたが、私はまだ正しいランクを得ていません:S –
ランクはリストの位置にエンコードされています。私は 'Person.Rank'でそれを提供するように答えを更新します。 – Haukinger
パーフェクト!今私は同じスコアを持つ人のランキングを修正する方法を理解する必要があります。ありがとうございました:) –