C#中的数组大小(长度)


98

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


1
@Marcelo:...但是它仍然无法回答诸如“我的眼镜在哪里”之类的简单问题。;)
Guffa 2010年

2
“尺寸”是什么意思?元素数或字节大小?
FredrikMörk,2010年

2
@fearofawhackplanet我投票赞成,因为我遇到了同样的问题,即发现长度不适用于多维数组,并且由于这个问题而发现了Rank和GetLength(index)。
TheMathemagician

1
@fearofawhackplanet我相信它有145,000次浏览,这一事实证明了它的相关性。已投票。
brycejl

Answers:


152

如果是一维数组a

a.Length

将给出的元素数量a

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

b.Rank

将给出维数(2)和

b.GetLength(dimensionIndex)

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

有关更多信息,请参见System.Array文档

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

例如,可能具有以下内容:

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].Lengthc[1].Lengthc[2].Length将是3,图2和7,分别。


1
为了完整起见,您可能还列出了锯齿状阵列的工作方式(例如int[][]; ;-)
Lucero,2010年

我认为这是,@Lucerno,但想通了另一个问题-找出大小的东西里面的数组-锯齿状排列的真的只是一个单一尺寸的阵列,恰好包含单挑尺寸的阵列,我敢肯定你知道。
布莱尔·康拉德

3
当然,我知道您是对的,这就是为什么我在评论中加上笑脸而不是自己写下答案。但是,对于所有.NET新手来说,[,]和之间的区别[][]似乎并不明确,因此,仍然有必要指出,[][]从您的答案来看,它不是多维数组。
Lucero 2010年

2
好答案。但是,您可能想要更改b.GetLength[0] is 3 and b.GetLength[1] is 5应该b.GetLength(0) and b.GetLength(1)
Droogans 2012年

29

您可以查看Array文档以找到此问题的答案。

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

int sizeOfArray = array.Length;

但是,由于这是一个基本问题,毫无疑问,您还有更多类似的问题,而不仅仅是告诉您答案,我宁愿告诉您如何自己找到答案。

Visual Studio智能感知

当您键入变量的名称并按键时,.它将显示该对象可用的所有方法,属性,事件等的列表。当您突出显示成员时,它会为您提供有关其功能的简短说明。

按F1

如果找到可以满足您需要的方法或属性,但不确定,可以将光标移到该方法或属性上,然后按F1键以获得帮助。在这里,您可以获得更详细的描述以及相关信息的链接。

搜索

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

使用教程

如果您刚刚开始学习C#,则会发现遵循本教程更容易。我可以推荐MSDN上的C#教程。如果您想读书,我建议您使用Essential C#

堆栈溢出

如果您无法自行找到答案,请随时在堆栈溢出中发布问题。但是,如果您表明您已努力先找到自己的答案,我们将不胜感激。


3
马克,做得好,但可能太夸张了!
Nayan 2010年

1
@Nayan:谢谢!尽管OP可以从其他海报中迅速得到他的回答是很棒的,但我觉得教初学者如何查找信息比教导他们对特定问题的答案更为重要。我希望OP认为此答案有用,并且可以避免他们不得不问数百个本可以找到答案的问题。
Mark Byers 2010年

12
+1以抽出时间采取这种方法-“给男人一条鱼...”等
彼得·凯利

如果必须这样做,我将在此处将OP重定向到您的答案=)是的,我完全同意您的意见!
纳扬

1
很好,但是我觉得应该以某种方式自动将其链接。他们无法启动“值得查看的答案”页面吗?我要添加的一件事是,在发布问题之前,应该先检查堆栈溢出本身。通常,我只是开始发布问题,然后看到弹出的相关问题。我不确定答案是否也存在于互联网上的其他地方。
2011年

16

对于一维数组

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

用于多维数组

int length = listItems.Rank;

获得1维的大小

int length =  listItems.GetLength(0);

2
Rank属性不返回项目数,而是返回维数。
Guffa'4

在哪里可以找到有关一维数组支持的属性的文档?(即,LengthRankGetLength
胡志明市陈


8

Length财产。

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

5

对于单维数组,请使用Length属性:

int size = theArray.Length;

对于多维数组,该Length属性返回数组中的项目总数。您可以使用该GetLength方法来获取尺寸之一的尺寸:

int size0 = theArray.GetLength(0);

3

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

数组:

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

类型列表数组:

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

1

它是这样的:1D:

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

2D:

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

然后,当您使用此数组时:

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

或者您可以声明类似矩阵的内容

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

0

到目前为止,错过的是我突然感到恼火的事情:

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

答案是:已放入new X[number] 创建的X类型数组中的X类型项目数量必须自己承担

例如。使用计数器:int countItemsInArray = 0以及countItemsInArray++对数组的每次分配。

(刚创建的数组new X[number]具有number已分配的类型X的项目(引用)的所有空间,您可以将其分配为内部的任何位置,例如,第一次分配(如果number= 100且变量名称= aa[50] = new X();

我不知道C#是否在创建时指定数组中每个位置的初始值,如果没有指定,或者您无法将其与之比较(因为它可能是您自己已放入数组中的值),则您如果您不从以下位置开始顺序分配0(在所有情况下,所有小于countItemsInArray。)

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

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

(由于如上所述在创建时已经分配了数组的所有空间,并且sizeof仅在类型上起作用,所以没有类似的代码sizeof(variable)/sizeof(type)会起作用或产生大量项目而不进行跟踪。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.