我希望能够通过使用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;
}
}
答案 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_change
,dataset.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);
}
}
如果您了解调用函数时会发生什么,则使用单个循环。