Ima li bržeg načina za provjeravanje arraya? Napravio sam dva primjera - Array.Find i Any
Array.Find je brži za duplo od Any. Ima li što brže od Array.Find-a ? Ili neki drugi način, možda sortiranje Arraya prije pretrage?
string DrawPlane(Point[] plane, int planeWidth, int planeHeight, byte findType)
{
Func<int, int, bool> planeExists = (x, y) =>
{
switch (findType)
{
case 1:
default:
return plane.Any(p => p.X == x && p.Y == y);
case 2:
return Array.Find(plane, p => p.X == x && p.Y == y) != null;
}
};
StringBuilder bldr = new StringBuilder();
for (var y = 0; y < planeHeight; y++)
{
StringBuilder line = new StringBuilder();
for (var x = 0; x < planeWidth; x++)
{
if (!planeExists(x, y))
line.Append(".");
else
line.Append("X");
}
bldr.AppendLine(line.ToString());
}
return bldr.ToString();
}
int planeWidth = 1000;
int planeHeight = 1000;
int pointsNum = 50;
int testCount = 10;
Point[] plane = new Point[pointsNum];
Random rnd = new Random();
for (var i = 0; i < pointsNum; i++)
{
int x = rnd.Next(0, planeWidth);
int y = rnd.Next(0, planeHeight);
plane[i] = new Point(x, y);
}
List<long> times1 = new List<long>();
List<long> times2 = new List<long>();
for (var i = 1; i <= testCount; i++)
{
Stopwatch watch = new Stopwatch();
watch.Start();
string ps = DrawPlane(plane, planeWidth, planeHeight, 1);
watch.Stop();
times1.Add(watch.ElapsedMilliseconds);
}
for (var i = 1; i <= testCount; i++)
{
Stopwatch watch = new Stopwatch();
watch.Start();
string ps = DrawPlane(plane, planeWidth, planeHeight, 2);
watch.Stop();
times2.Add(watch.ElapsedMilliseconds);
}
double avgMs1 = times1.Average();
double avgMs2 = times2.Average();