我可以使用开关简化多个阵列内容的打印吗? C#

时间:2018-05-02 20:00:31

标签: c#

我希望能够通过使用switch语句来更改foreach循环打印的数组,但是我发现这样做的唯一方法是使用5个foreach循环。我希望能够使用一个来简化我的代码并使添加新数组更容易吗?

switch (arraychoice.Key)
{
  case ConsoleKey.A:
    Console.Clear();
    bubblesort.Bubblesort(dataset.Num128_change);

    foreach (double item in dataset.Num128_change)
    {
        Console.WriteLine(item);
    }

    Console.ReadKey();
    break;

    case ConsoleKey.B:
    Console.Clear();
    bubblesort.Bubblesort(dataset.Num128_close);

    foreach (double item in dataset.Num128_close)
    {
        Console.WriteLine(item);
    }

    Console.ReadKey();
    break;

 case ConsoleKey.C:
    Console.Clear();
    bubblesort.Bubblesort(dataset.Num128_high);

    foreach (double item in dataset.Num128_close)
    {
        Console.WriteLine(item);
    }

    break;

 case ConsoleKey.D:
    Console.Clear();
    bubblesort.Bubblesort(dataset.Num128_low);

    foreach (double item in dataset.Num128_close)
    {
        Console.WriteLine(item);
    }

    break;

 case ConsoleKey.E:
    Console.Clear();
    bubblesort.Bubblesort(dataset.Num128_open);

    foreach (double item in dataset.Num128_close)
    {
        Console.WriteLine(item);
    }

    break;
}

}

3 个答案:

答案 0 :(得分:2)

不确定程序中的类型,但此时我会考虑这样的事情(伪代码):

//init map of relation between the key pressed and sort order to execute
var map = new Dictionary<Console.Key, SortType> { 
             {ConsoleKey.A, dataset.Num128_change},
             {ConsoleKey.B, dataset.Num128_close},
             {ConsoleKey.C, dataset.Num128_high}  
}

.. after somewhere in the code  

Console.Clear();
bubblesort.Bubblesort(map[arraychoice.Key]);
foreach (var item in dataset) //iterator over results
        Console.WriteLine(item); //`ToString()` invocation on type

它不是&#34;复制/粘贴&#34;解决方案,但希望你明白了。

答案 1 :(得分:1)

将变量视为一个盒子。您声明您的变量/框并确定数据的“类型”。

然后,您可以将该变量用于一个代码块,无论实际数据进入变量(或框)是什么。

因此,如果您有多个double类型数据数组:dataset.Num128_changedataset.Num128_close,您可以在处理之前将其中一个数组放入变量(chosenArray)中它

EG。这并不像其他答案那样简洁,但我认为对你来说更清楚。

double[] chosenArray = double[0];
switch (arraychoice.Key)
{
  case ConsoleKey.A:
    chosenArray = dataset.Num128_change;
    break;
  case ConsoleKey.B:
    chosenArray = dataset.Num128_close;
    break;

  //add the other cases
  ....
}

bubblesort.Bubblesort(chosenArray);
foreach (double item in chosenArray)
{
   Console.WriteLine(item);
}

Console.ReadKey();

答案 2 :(得分:0)

我没有真正意识到尝试简化代码的重点。

你的五个循环不能同时执行,甚至不能一个接一个地执行,但只有当条件命中时才会执行。

尝试简化此操作会导致您的应用程序使用更多资源,因此使用了一种列表和索引。

无论如何,你可以把你的循环放在一个函数中并调用它。

switch (arraychoice.Key)
{
    case ConsoleKey.A:
         Console.Clear();
         bubblesort.Bubblesort(dataset.Num128_close);
         theloop(dataset.Num128_change);
        break;
    case ConsoleKey.B:
        Console.Clear();
        bubblesort.Bubblesort(dataset.Num128_close);
        theloop(dataset.Num128_change);
        break;
    default: 
        break;
}

void theloop<T>(IEnumerable<T> List )
{
    foreach (var item in List)
    {
        Console.WriteLine(item);
    }
}

如果您了解调用函数时会发生什么,则使用单个循环。