【问题标题】:Best way to handle array of arrays in C#在 C# 中处理数组数组的最佳方法
【发布时间】:2021-06-24 02:23:16
【问题描述】:

我需要在 C# 中创建一个字符串数组。基本上,我想做以下,一种混合​​ C/C#:

private string[] revA = new string[] {"one", "two", "three" };
private string[] revB = new string[] {"four", "five", "six" };
private string[] revC = new string[] {"seven", "eight", "nine" };

string[,] list = {revA, revB, revC};

string outStr = list[0][0];  // outStr == "one"
string outStr = list[2][1];  // outStr == "eight"

但我知道那行不通。

我研究了ArrayListList,但我不知道如何让它发挥作用。 任何帮助将不胜感激。

【问题讨论】:

  • string[,]string[][] 不同,您的意思是使用后者吗?
  • 这是一个简单的问题,你最好的做法是找出多维数组和锯齿数组之间的区别,你就会有你的解决方案。你可以从这里开始google.com/…
  • 也可以使用 List,我发现列表在 C# 中更容易处理。要定义它,请使用: private var revA = new List();然后您可以使用以下方法添加它们:revA.Add('item');
  • ArrayList 已经很老了。除了处理无法升级的遗留代码之外,在所有情况下都首选 List。升级可以的遗留代码

标签: c# arrays


【解决方案1】:

你需要使用锯齿数组string[][]而不是多维数组string[,]

此来源可以为您提供更多详细信息Why we have both jagged array and multidimensional array?

【讨论】:

  • 我之前实际上已经尝试过string[][]语法,但是编译器并没有让我在全局空间中初始化list变量。 “字段初始值设定项无法引用非静态字段、方法或属性 'revA'”当我在函数中移动 'list' 时,它起作用了。
【解决方案2】:
string[,] list = new string[3, 3] {{"one", "two", "three" },
                                  {"four", "five", "six" },
                                  {"seven", "eight", "nine" } };



string outStr = list[0, 0];  // outStr == "one"

【讨论】:

  • 虽然我会避免这样做;与锯齿状数组相比,multidim 数组通常更让人头疼
【解决方案3】:

这可以通过 ArrayList 和 C# 中的 List 实现。 我尝试了以下代码,您可以根据自己的要求检查和探索更多。

string[] reva = new string[] { "one", "two", "three" };
        string[] revb = new string[] { "four", "five", "six" };
        string[] revc = new string[] { "seven", "eight", "nine" };


        ArrayList arrayList = new ArrayList() { reva, revb, revc };

        List<string> nums = reva.Cast<string>().ToList();
        nums.ForEach(Console.WriteLine);
        Console.ReadLine();




        Console.ReadLine();

【讨论】:

    【解决方案4】:

    虽然提到了锯齿状和多维数组,但第三种选择是自定义多维数组类型。类似的东西

        public class My2DArray<T>
        {
            public T[] Array { get; }
            public int Width { get; }
            public int Height { get; }
    
            public My2DArray(int width, int height, params T[] initialItems)
            {
                Width = width;
                Height = height;
                Array = new T[width * height];
                initialItems.CopyTo(Array, 0);
            }
            public T this[int x, int y]
            {
                get => Array[y * Width + x];
                set => Array[y * Width + x] = value;
            }
        }
    

    与多维数组相比,它的优势在于支持单维数组可直接访问,这有助于互操作性,或者如果您只想遍历所有项。

    您可以根据需要添加构造函数来初始化它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多