かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

成績表のソート

前に「成績表のノート - かずきのBlog@Hatena」でやった問題をC#3.0で書き直してみた。
こういう、問題こそLINQの出番でしょ!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ScoreSort
{
    class Program
    {
        static void Main(string[] args)
        {
            // 学籍番号と得点(成績)の組:
            // record      (7, 345), (8, 678), (1, 123), ...
            // 
            // それと学籍番号の列:
            // target      { 4, 5, 3, 1, 2 };
            // 
            // があるとき、targetを得点順にソートせよ。
            var records = new[]{
                                new[] {7, 345},
                                new[] {8, 678},
                                new[] {1, 123},
                                new[] {2, 456},
                                new[] {5, 567},
                                new[] {6, 812},
                                new[] {3, 781},
                                new[] {4, 234}
                         };
            var target = new[] { 4, 5, 3, 1, 2 };

            var sortedTarget = from num in target
                               join record in records on num equals record[0]
                               orderby record[1]
                               select new { Number = num, Score = record[1] };
            foreach (var num in sortedTarget)
            {
                Console.WriteLine(num);
            }
        }
    }
}

実行結果↓

{ Number = 1, Score = 123 }
{ Number = 4, Score = 234 }
{ Number = 2, Score = 456 }
{ Number = 5, Score = 567 }
{ Number = 3, Score = 781 }

問い合わせ言語様々。