裏口からのC#実践入門

4-3 散在する情報

相互に強く関連する情報は散在させないでひとまとめに扱うべき。
説明用コードなので、何がしたいのかは関係ないので注意。

using System;

namespace Uraguchi.Scene4
{
    public struct Tenshi3TriplePoint
    {
        public double X, Y, Z;
    }

    public class Tenshi3PointInfo
    {
        public static Tenshi3TriplePoint[] point = new Tenshi3TriplePoint[10000];
        internal static void Reset()
        {
            point = new Tenshi3TriplePoint[10000];
        }
    }


    public class Tenshi3
    {
        public static void Run()
        {
            Tenshi3PointInfo.point[0].X = 0;
            Tenshi3PointInfo.point[0].Y = 0;
            Tenshi3PointInfo.point[0].Z = 0;
            Tenshi3PointInfo.point[1].X = 1;
            Tenshi3PointInfo.point[1].Y = 1;
            Tenshi3PointInfo.point[1].Z = 1;
            Console.WriteLine(CalcDist(0, 1));
        }

        private static double CalcDist(int index1, int index2)
        {
            Tenshi3PointInfo.Reset();
            var pt1 = Tenshi3PointInfo.point[index1];
            var pt2 = Tenshi3PointInfo.point[index2];

            return Math.Sqrt(
                (pt1.X - pt2.X) * (pt1.X - pt2.X) +
                (pt1.Y - pt2.Y) * (pt1.Y - pt2.Y) +
                (pt1.Z - pt2.Z) * (pt1.Z - pt2.Z)
            );
        }
    }
}

4-4 多すぎるクエリ

Enumerable と Array を意識する。

using System;
using System.Linq;

namespace Uraguchi.Scene4
{
    public class Tenshi4
    {
        public static void Run()
        {
            var start = DateTime.Now;
            var ar = Enumerable.Range(0, 10000).ToArray();
            int sum = 0;
            for (int i = 0; i < ar.Count(); i++)
            {
                sum = sum / 2 + ar.ElementAt(i);
            }

            Console.WriteLine(sum);
            Console.WriteLine(DateTime.Now - start);
        }
    }
}