【问题标题】:Array Size (Length) in C#C# 中的数组大小(长度)
【发布时间】:2011-02-20 02:25:42
【问题描述】:

如何在 C# 中确定数组的大小(长度/项数)?

【问题讨论】:

  • @Marcelo:......但它仍然无法回答诸如“我的眼镜在哪里”之类的非常简单的问题。 ;)
  • “大小”是什么意思?元素的数量或大小(以字节为单位)?
  • @fearofawhackplanet 我投了赞成票,因为我遇到了同样的问题,即发现 Length 不适用于多维数组,并且由于这个问题发现了 Rank 和 GetLength(index)。
  • @fearofawhackplanet 我相信它拥有 145,000 次浏览量这一事实证明了它的相关性。赞成。

标签: c# arrays size


【解决方案1】:

如果是一维数组a

a.Length

会给出a的元素个数。

如果b是一个矩形多维数组(例如int[,] b = new int[3, 5];

b.Rank

将给出维数 (2) 和

b.GetLength(dimensionIndex)

将获得任何给定维度的长度(维度的基于 0 的索引 - 所以b.GetLength(0) 是 3,b.GetLength(1) 是 5)。

请参阅System.Array documentation 了解更多信息。

正如@Lucero 在 cmets 中指出的那样,有一个“锯齿状数组”的概念,它实际上只不过是(通常是一维)数组的一维数组。

例如,可以有以下内容:

int[][] c = new int[3][];
c[0] = new int[] {1, 2, 3};
c[1] = new int[] {3, 14};
c[2] = new int[] {1, 1, 2, 3, 5, 8, 13};

请注意,c 的 3 个成员都有不同的长度。 在这种情况下,c.Length 将表示c、(3) 和c[0].Length 的元素个数,c[1].Lengthc[2].Length 将分别为 3、2 和 7。

【讨论】:

  • 为了完整起见,您还可以列出锯齿状数组的工作方式(例如int[][]);-)
  • 我考虑过,@Lucerno,但认为这是一个不同的问题 - 找出数组 inside 的大小 - 锯齿状数组实际上只是一个单维数组碰巧包含一维数组,我相信你知道。
  • 当然我知道你是对的,这就是为什么我用笑脸添加评论而不是自己写答案。但是,[,][][] 之间的区别似乎对所有 .NET 新手来说都不是很清楚,因此可能仍然值得注意的是,[][] 在您的答案中并不是一个多维数组。
  • 好答案。但是,您可能希望将 b.GetLength[0] is 3 and b.GetLength[1] is 5 更改为 b.GetLength(0) and b.GetLength(1)
【解决方案2】:

您可以查看documentation for Array 以找到此问题的答案。

在这种特殊情况下,您可能需要Length

int sizeOfArray = array.Length;

但既然这是一个如此基本的问题,你无疑还有更多这样的问题,而不是仅仅告诉你答案,我宁愿告诉你如何自己找到答案。

Visual Studio 智能感知

当您键入变量的名称并按下. 键时,它会显示该对象上所有可用的方法、属性、事件等的列表。当您突出显示某个成员时,它会简要说明它的作用。

按 F1

如果您发现某个方法或属性可能会执行您想要的操作但您不确定,您可以将光标移到它上面并按 F1 来获取帮助。在这里,您可以获得更详细的说明以及相关信息的链接。

搜索

搜索词size of array in C# 提供了许多链接,可以告诉您问题的答案等等。程序员必须学习的最重要的技能之一是如何查找信息。自己找到答案通常会更快,尤其是在之前提出过相同问题的情况下。

使用教程

如果您刚开始学习 C#,您会发现学习教程会更容易。我可以推荐 MSDN 上的C# tutorials。如果你想要一本书,我推荐Essential C#

堆栈溢出

如果您自己无法找到答案,请随时在 Stack Overflow 上发布问题。但是,如果您表明您已经努力自己先找到答案,我们将不胜感激。

【讨论】:

  • 干得好,马克,但可能有点矫枉过正!
  • @Nayan:谢谢!虽然很高兴 OP 从其他海报中快速得到答案,但我觉得教初学者如何查找信息比教他们回答特定问题更重要。我希望 OP 发现这个答案很有用,并且它使他们不必问数百个他们本可以找到答案的问题。
  • +1 花时间采用这种方法 - “给男人一条鱼……”等等。
  • 如果我必须这样做,我将在此处将 OP 重定向到您的答案 =) 是的,我完全同意您的看法!
  • 这很好,但我觉得它应该以某种方式自动链接。他们不能开始一个“值得一看的答案”页面吗?我要补充的一件事是,在发布问题之前应该检查堆栈溢出本身。很多时候我只是开始发布问题,然后看到弹出的相关问题。如果答案也不属于这里,我不确定答案是否存在于互联网上的其他地方。
【解决方案3】:

对于一维数组

int[] listItems = new int[] {2,4,8};
int length = listItems.Length;

对于多维数组

int length = listItems.Rank;

获取一维的大小

int length =  listItems.GetLength(0);

【讨论】:

  • Rank 属性不返回项目数,它返回维度数。
  • 在哪里可以找到一维数组支持的属性的文档? (即LengthRankGetLength
【解决方案4】:

yourArray.Length :)

【讨论】:

    【解决方案5】:

    使用Length 属性。

    int[] foo = new int[10];
    int n = foo.Length; // n == 10
    

    【讨论】:

      【解决方案6】:

      对于一维数组,您使用Length 属性:

      int size = theArray.Length;
      

      对于多维数组,Length 属性返回数组中的项目总数。您可以使用GetLength 方法获取其中一个维度的大小:

      int size0 = theArray.GetLength(0);
      

      【讨论】:

        【解决方案7】:

        在大多数一般情况下,都会使用“长度”和“计数”。

        数组:

        int[] myArray = new int[size];
        int noOfElements = myArray.Length;
        

        类型化列表数组:

        List <int> myArray = new List<int>();
        int noOfElements = myArray.Count;
        

        【讨论】:

          【解决方案8】:

          它是这样的: 一维:

           type[] name=new type[size]  //or =new type[]{.....elements...}
          

          二维:

           type[][]name=new type[size][] //second brackets are emtpy
          

          那么当你使用这个数组时:

           name[i]=new type[size_of_sec.Dim]
          

          或者你可以声明一个矩阵之类的东西

          type[ , ] name=new type [size1,size2]
          

          【讨论】:

            【解决方案9】:

            至今遗漏的是我突然被激怒的东西:

            我如何知道数组中的项目数量? .Length 是否等于列表的.Count

            答案是:已放入使用new X[number] 创建的X 类型数组中的X 类型项目的数量你必须自己携带

            例如。使用计数器:int countItemsInArray = 0countItemsInArray++ 用于数组的每个分配。

            (刚刚使用new X[number]创建的数组已经为number类型X的项目(引用)分配了所有空间,您可以将其分配给内部的任何位置作为您的第一个分配,例如(如果number = 100和变量名 = a) a[50] = new X();

            我不知道 C# 是否在创建时指定了数组内每个位置的初始值,如果没有,或者您无法比较的初始值(因为它可能是您自己放入数组中的值),如果您没有从 0 开始按顺序分配,您还必须跟踪您已经分配到的数组中的哪些位置(在这种情况下,所有小于 countItemsInArray 的位置都将被分配到)。)

            在您的问题中,数组的大小(长度/项目数) 取决于 / 是代表“替代”还是“除以”后者仍然必须覆盖(我刚刚给出的“项目数量”作为“项目数量”而其他人给出了.Length,这对应于我上面代码中number的值):

            C# 有一个 sizeof 运算符 (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof)。用于内置类型(例如 int)是安全的(并且只对类型(而不是变量)进行操作)。因此,int 类型的数组 b 的大小(以字节为单位)将为 b.Length * sizeof(int)

            (由于数组的所有空间已经在创建时分配,如上所述,并且sizeof 仅适用于类型,没有像 sizeof(variable)/sizeof(type) 这样的代码可以工作或产生不跟踪的项目数量。)

            【讨论】:

              猜你喜欢
              • 2020-11-11
              • 1970-01-01
              • 1970-01-01
              • 2023-04-06
              • 2011-07-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-09-11
              相关资源
              最近更新 更多