前に「成績表のノート - かずきの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 }
問い合わせ言語様々。