我的老师要求我们以最有效的方式制作一个程序,并为此使用一个开关盒.
程序要求用户输入,并且根据用户输入的内容,程序必须遵循一组指令.
如果输入是"A"或"a",则必须从A到Z对数组进行排序.
如果输入为"Z"或"z",则数组必须从Z到A排序.
如果输入为"R"或"r",则必须反转阵列.
数组是一个字符串[].
所以我想知道它是否更有效
switch (choice.ToLower())
{
case "a":
Array.Sort(array);
break;
case "z":
Array.Sort(array);
Array.Reverse(array);
break;
case "r":
Array.Reverse(array);
break;
}
Run Code Online (Sandbox Code Playgroud)
要么
if (choice.ToLower() == "a" || choice.ToLower() == "z")
{
Array.Sort(array);
}
if (choice.ToLower() == "r" || choice.ToLower() == "z")
{
Array.Reverse(array);
}
Run Code Online (Sandbox Code Playgroud)
如果这个代码可以进一步优化.
那么,是使用开关案例的最有效方式,还是如上所示的if结构并解释原因?
我只是好奇,因为我总是试图完全优化我的所有代码.
好吧,你可以自己检查一下:
class Program
{
static void MyMethod1(int[] array, string choice)
{
switch (choice.ToLower())
{
case "a":
Array.Sort(array);
break;
case "z":
Array.Sort(array);
Array.Reverse(array);
break;
case "r":
Array.Reverse(array);
break;
}
}
static void MyMethod2(int[] array, string choice)
{
if (choice.ToLower() == "a" || choice.ToLower() == "z")
{
Array.Sort(array);
}
if (choice.ToLower() == "r" || choice.ToLower() == "z")
{
Array.Reverse(array);
}
}
static int[][] CreateRandomArrays(int num, int length)
{
Random rand = new Random();
int[][] arrays = new int[num][];
for (int i = 0; i < arrays.Length; i++)
{
arrays[i] = new int[length];
for (int i2 = 0; i2 < length; i2++)
arrays[i][i2] = rand.Next();
}
return arrays;
}
static void Main(string[] args)
{
int[][] test1 = CreateRandomArrays(50, 200000);
int[][] test2 = CreateRandomArrays(50, 200000);
Stopwatch s = new Stopwatch();
s.Start();
for (int i = 0; i < test1.Length; i++) MyMethod1(test1[i], "z");
s.Stop();
Console.WriteLine(s.ElapsedMilliseconds);
s.Restart();
for (int i = 0; i < test2.Length; i++) MyMethod2(test2[i], "z");
s.Stop();
Console.WriteLine(s.ElapsedMilliseconds);
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的结果几乎相同:
1010 ms vs 1008 ms
Run Code Online (Sandbox Code Playgroud)