2009/08/12

[C#]九九テーブル

先日schemeで書いたものをC#で書いてみようかなーと。

型宣言でかなりごちゃごちゃ。varはいいな。

 

 

download - QxQ.cs

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

namespace QxQ
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<IEnumerable<int>, IEnumerable<int>
                , List<List<KeyValuePair<KeyValuePair<int, int>, int>>>> tblmaker;

 

            tblmaker = new Func<IEnumerable<int>, IEnumerable<int>
                , List<List<KeyValuePair<KeyValuePair<int, int>, int>>>>(
                (IEnumerable<int> row, IEnumerable<int> col) =>
                {
                    List<List<KeyValuePair<KeyValuePair<int, int>, int>>> ret
                        = new List<List<KeyValuePair<KeyValuePair<int, int>, int>>>();
                    row.ToList().ForEach(i =>
                        {
                            List<KeyValuePair<KeyValuePair<int, int>, int>> rows
                                = new List<KeyValuePair<KeyValuePair<int, int>, int>>();

                            col.ToList().ForEach(j =>
                                {
                                    rows.Add(new KeyValuePair<KeyValuePair<int, int>, int>(
                                        new KeyValuePair<int, int>(i, j), i * j));
                                });
                            ret.Add(rows);
                        });
                    return ret;
                });

            List<List<KeyValuePair<KeyValuePair<int, int>, int>>> tbl
                 = tblmaker(Enumerable.Range(1, 10), Enumerable.Range(1, 9));

            Console.WriteLine(tbl);
            Display(tbl);
            Console.ReadLine();

            /*
System.Collections.Generic.List`1[System.Collections.Generic.List`1[System.Colle
ctions.Generic.KeyValuePair`2[System.Collections.Generic.KeyValuePair`2[System.I
nt32,System.Int32],System.Int32]]]
((1 . 1) 1)((1 . 2) 2)((1 . 3) 3)((1 . 4) 4)((1 . 5) 5)((1 . 6) 6)((1 . 7) 7)((1 . 8) 8)((1 . 9) 9)
((2 . 1) 2)((2 . 2) 4)((2 . 3) 6)((2 . 4) 8)((2 . 5) 10)((2 . 6) 12)((2 . 7) 14)((2 . 8) 16)((2 . 9) 18)
((3 . 1) 3)((3 . 2) 6)((3 . 3) 9)((3 . 4) 12)((3 . 5) 15)((3 . 6) 18)((3 . 7) 21)((3 . 8) 24)((3 . 9) 27)
((4 . 1) 4)((4 . 2) 8)((4 . 3) 12)((4 . 4) 16)((4 . 5) 20)((4 . 6) 24)((4 . 7) 28)((4 . 8) 32)((4 . 9) 36)
((5 . 1) 5)((5 . 2) 10)((5 . 3) 15)((5 . 4) 20)((5 . 5) 25)((5 . 6) 30)((5 . 7) 35)((5 . 8) 40)((5 . 9) 45)
((6 . 1) 6)((6 . 2) 12)((6 . 3) 18)((6 . 4) 24)((6 . 5) 30)((6 . 6) 36)((6 . 7) 42)((6 . 8) 48)((6 . 9) 54)
((7 . 1) 7)((7 . 2) 14)((7 . 3) 21)((7 . 4) 28)((7 . 5) 35)((7 . 6) 42)((7 . 7) 49)((7 . 8) 56)((7 . 9) 63)
((8 . 1) 8)((8 . 2) 16)((8 . 3) 24)((8 . 4) 32)((8 . 5) 40)((8 . 6) 48)((8 . 7) 56)((8 . 8) 64)((8 . 9) 72)
((9 . 1) 9)((9 . 2) 18)((9 . 3) 27)((9 . 4) 36)((9 . 5) 45)((9 . 6) 54)((9 . 7) 63)((9 . 8) 72)((9 . 9) 81)
((10 . 1) 10)((10 . 2) 20)((10 . 3) 30)((10 . 4) 40)((10 . 5) 50)((10 . 6) 60)((10 . 7) 70)((10 . 8) 80)((10 . 9) 90)           
            */

 

            var tablemaker2 = new Func<IEnumerable<int>, IEnumerable<int>
            , List<List<KeyValuePair<KeyValuePair<int, int>, int>>>>((row, col) =>
                {
                    var ret = new List<List<KeyValuePair<KeyValuePair<int, int>, int>>>();

                    row.ToList().ForEach(i =>
                    {
                        var rows = new List<KeyValuePair<KeyValuePair<int, int>, int>>();

                        col.ToList().ForEach(j =>
                        {
                            rows.Add(new KeyValuePair<KeyValuePair<int, int>, int>(
                                new KeyValuePair<int, int>(i, j), i * j));
                        });
                        ret.Add(rows);
                    });
                    return ret;
                });
        }

        private static void Display(List<List<KeyValuePair<KeyValuePair<int, int>, int>>> tbl)
        {
            tbl.ForEach(list =>
                {
                    list.ForEach(pair =>
                        {
                            Console.Write("(({0} . {1}) {2})"
                                , pair.Key.Key, pair.Key.Value, pair.Value);
                        });
                    Console.WriteLine();
                });
        }
    }
}

0 件のコメント:

コメントを投稿