【C#】ディクショナリ(コレクション)をラムダ式でソートする

サンプルプログラム

(省略)

//スコアクラス
private class Score
{
    public int artScore { get; set; }      //芸術のスコア
    public int englishScore { get; set; }  //英語のスコア
    public int scienceScore { get; set; }  //科学のスコア
}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    System.Random r = new System.Random(100);

    //ディクショナリ「personScore」に5人分のスコアを設定する
    String[] persons = new String[5] { "桜木", "流川", "宮城", "三井", "赤木" };
    Dictionary<String, Score> personScore = new Dictionary<String, Score>();
    foreach (String person in persons)
    {
        Score score = new Score();
        score.artScore = r.Next(100);
        score.englishScore = r.Next(100);
        score.scienceScore = r.Next(100);
        personScore.Add(person, score);
    }

    //芸術のスコアの昇順でソート
    var personScoreSortUp = personScore.OrderBy((x) => x.Value.artScore);

    Debug.WriteLine("●芸術のスコアの昇順");
    foreach (var person in personScoreSortUp)
    {
        Debug.Write(person.Key + ":");
        Debug.Write("芸術のスコアは" + person.Value.artScore + "\t\t");
        Debug.Write("英語のスコアのスコアは" + person.Value.englishScore + "\t\t");
        Debug.WriteLine("科学のスコアは" + person.Value.scienceScore);
    }

    Debug.WriteLine("");
    Debug.WriteLine("================================");
    Debug.WriteLine("");

    //芸術のスコアの降順でソート
    var personScoreSortDown = personScore.OrderByDescending((x) => x.Value.artScore);

    Debug.WriteLine("●芸術のスコアの降順");
    foreach (var person in personScoreSortDown)
    {
        Debug.Write(person.Key + ":");
        Debug.Write("芸術のスコアは" + person.Value.artScore + "\t\t");
        Debug.Write("英語のスコアのスコアは" + person.Value.englishScore + "\t\t");
        Debug.WriteLine("科学のスコアは" + person.Value.scienceScore);
    }
}

実行結果

タイトルとURLをコピーしました