Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用用户选择的维度创建数组_C#_Arrays_Dynamic_Dimensions_Custom Dimensions - Fatal编程技术网

C# 使用用户选择的维度创建数组

C# 使用用户选择的维度创建数组,c#,arrays,dynamic,dimensions,custom-dimensions,C#,Arrays,Dynamic,Dimensions,Custom Dimensions,用户应选择维度(1,2)。用户选择维度后,应创建具有该维度的数组。在此之后,数组将随机填充、排序和打印。 我已经为此创建了一些方法,这些方法引用了一维或二维数组 static void PrintArray(int[] arr) ... static void PrintArray(int[,] arr) ... static bool IsSorted(ref int[] arr) ... static bool IsSorted(ref int[,] arr) {

用户应选择维度(1,2)。用户选择维度后,应创建具有该维度的数组。在此之后,数组将随机填充、排序和打印。 我已经为此创建了一些方法,这些方法引用了一维或二维数组

 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;
 }
我唯一的问题是现在两个数组都需要具有相同的名称(arr),因为后面的方法只将arr作为参数

在选择数组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;
 }
静态void打印数组(int[]arr)。。。
静态无效打印数组(int[,]arr)。。。
静态布尔值已排序(参考int[]arr)。。。
静态布尔值排序(参考整数[,]arr)
{
对于(int i=0;iarr[i-1,j-1])
返回false;
返回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
            }
        }


您可以直接使用该类型,也可以与泛型
列表一起使用。
另一种解决方案是使用一维数组并模拟多维。@如果使用数组类型,我的方法如何知道它是一维数组还是二维数组?因为方法的参数必须是Array类型,所以。如果是这种情况,我就不能使用这些方法。属性返回维度号。如果数组是1D或2D
PrintArray(arr as int[]),我每次调用方法时都必须指定
打印数组(arr为int[,])
我可以将methods type object作为参数,但是我不能访问数组,比如
arr.Length
arr[0]=0
您可以将其反向转换为object,然后传递给您的方法,并使用if子句验证arr.GetType()是否为int[]或int[,]然后执行打印转换,再次返回到正确的类型以访问数组方法这将是一个非常糟糕的解决方案,我必须重写我的所有方法,这真的是唯一的解决方案吗?恐怕这样,你不能以相同的方式处理两种不同类型的对象,你必须将它们转换到其他可以处理的对象。我用打印解决方案更新了答案。