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

标签 c# arrays dynamic dimensions custom-dimensions

用户应选择维度 (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
            }
        }

关于c# - 使用用户选择的维度创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65394613/

相关文章:

c# - GridUnitType.Star?

Java字节数组到 double 转换

javascript - Angular.js 加载、处理并显示通过 REST $resource 获取的动态模板

c# - 将 Sprite x,y, width, height 转换为视口(viewport)矩形

c# - 集合初始化

javascript - 选择数组中的特定元素作为下拉列表

java - 复制对象数组,然后修改原始对象而不影响副本

ruby - 如何根据名称动态调用方法?

c# - 使用左列标题创建动态表的最佳方法

c# - 在标记中将数据绑定(bind)到转发器或以编程方式绑定(bind)它有什么区别