使用用户选择的维度创建数组
Create Array with Dimension selected by User
用户应选择维度 (1, 2)。用户选择维度后,应创建一个包含维度的数组。在此之后,数组将被随机填充、排序和打印。
我为此创建了引用一维或二维数组的方法。
我现在唯一的问题是两个数组需要具有相同的名称 (arr),因为后面的方法只将 arr 作为参数。
我试过在选择 array-dim 之前创建一个 var 变量。但是对于 var 我需要指定变量的类型,所以我不能简单地使用 var arr;
我的问题有什么解决办法吗?我真的不知道怎么解决这个问题。
最后我想要这样的东西:
var arr;
switch (arrDim)
{
case 1:
arr = Fill1DArrayRandom();
break;
case 2:
arr = Fill2DArrayRandom();
break;
}
PrintArray(arr);
switch (chosenAlgo)
{
case 1:
Algorithms.InsertionSort.Sort(ref arr);
break;
...
采用一维或二维数组的方法。
static void PrintArray(int[] arr) ...
static void PrintArray(int[,] arr) ...
static bool IsSorted(ref int[] arr) ...
static bool IsSorted(ref int[,] arr)
{
for (int i = 0; i < arr.Length - 1; i++)
for (int j = 0; j < arr.Length - 1; j++)
if (arr[i,j] > arr[i-1,j-1])
return false;
return true;
}
一个丑陋的解决方案是创建一个对象,然后将其转换为 int[] 数组,如下所示:
var arr = new object();
// switch here
arr = new int[5] { 1 ,2,3, 4, 5};
Console.WriteLine((arr as int[])[0]);
arr = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
Console.WriteLine((arr as int[,])[0, 0]);
和打印:
private static void Print(object arr)
{
if (arr.GetType() == typeof(int[,]))
{
int[,] myArr = arr as int[,];
Console.WriteLine(myArr[0, 0]);
// do stuff here with 2D array
}
else
{
int[] myArr = arr as int[];
Console.WriteLine(myArr[0]);
// do stuff here with 1D array
}
}
用户应选择维度 (1, 2)。用户选择维度后,应创建一个包含维度的数组。在此之后,数组将被随机填充、排序和打印。 我为此创建了引用一维或二维数组的方法。
我现在唯一的问题是两个数组需要具有相同的名称 (arr),因为后面的方法只将 arr 作为参数。
我试过在选择 array-dim 之前创建一个 var 变量。但是对于 var 我需要指定变量的类型,所以我不能简单地使用 var arr;
我的问题有什么解决办法吗?我真的不知道怎么解决这个问题。
最后我想要这样的东西:
var arr;
switch (arrDim)
{
case 1:
arr = Fill1DArrayRandom();
break;
case 2:
arr = Fill2DArrayRandom();
break;
}
PrintArray(arr);
switch (chosenAlgo)
{
case 1:
Algorithms.InsertionSort.Sort(ref arr);
break;
...
采用一维或二维数组的方法。
static void PrintArray(int[] arr) ...
static void PrintArray(int[,] arr) ...
static bool IsSorted(ref int[] arr) ...
static bool IsSorted(ref int[,] arr)
{
for (int i = 0; i < arr.Length - 1; i++)
for (int j = 0; j < arr.Length - 1; j++)
if (arr[i,j] > arr[i-1,j-1])
return false;
return true;
}
一个丑陋的解决方案是创建一个对象,然后将其转换为 int[] 数组,如下所示:
var arr = new object();
// switch here
arr = new int[5] { 1 ,2,3, 4, 5};
Console.WriteLine((arr as int[])[0]);
arr = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
Console.WriteLine((arr as int[,])[0, 0]);
和打印:
private static void Print(object arr)
{
if (arr.GetType() == typeof(int[,]))
{
int[,] myArr = arr as int[,];
Console.WriteLine(myArr[0, 0]);
// do stuff here with 2D array
}
else
{
int[] myArr = arr as int[];
Console.WriteLine(myArr[0]);
// do stuff here with 1D array
}
}