关于C#:.NET数组-“length”、”count()”和”rank”之间的差异

.net array - difference between “Length”, “Count()” and “Rank”

.NET数组的"length"、"count()"和"rank"有什么区别?


Length是数组对象的属性,使用它是确定数组中元素计数的最有效方法(array.length在msdn文档中)

Count()是一种LINQ扩展方法,它的作用是相同的。它应用于数组,因为数组是可枚举的对象。最好使用Length,因为Count()可能会更贵(请参阅本问题进一步讨论和有关count的msdn文档以供参考)

Rank是返回维度数的属性(完全不同)。当您声明一个数组int[,] myArray = new int[5,10];时,它的Rank将是2,但它将总共包含50个元素(秩属性上的msdn)。

编辑:感谢Kornelije Petak提供相关的msdn链接。


  • Length:数组中元素的总数。
  • LongLength:同Length,返回long(当大于231时)
  • Count():与其他集合类型一起使用的LINQ扩展方法。
  • Rank:数组中的维数(对于向量,总是1)。仅在.NET 3.5+中。
  • GetLength()GetLongLength():数组某维的长度。
  • GetLowerBound():数组某维的起始索引;矢量总是0
  • GetUpperBound():数组某维的结束索引;矢量总是Length - 1

有趣的是,没有GetLongUpperBound()GetLongLowerBound()的…

既然我们讨论了这个主题,那么数组和向量在.NET中的区别是什么?

阵列与矢量

向量是C_中通常称为"1d"的数组。但是,一维数组实际上不是像int[]那样的类型,而是int[*]类型。C不直接支持它们;但是,它们可以用Array.CreateInstance创建,并且可以有非零的下限。但是,它们比向量稍慢,因为向量直接支持在CLR中。因为实际上很少使用一维数组,C决定不支持它们(尽管它可以通过使用var关键字从声明它们的另一个模块使用它们!).


  • Length是返回Array中元素数目的属性。
  • Count()是一个linq扩展,它在IEnumerable上做同样的扩展。或者,它可以使用谓词作为参数,并返回满足该参数的元素数。
  • Rank是返回Array中维度数的属性。

LengthArray的财产,因为c 1.x

Count()IEnumerable的一种扩展方法,因为现在每个T[]都隐式地实现IEnumerable

注意,对于一个数组,Count()通常比Length慢得多,因为访问Length属性是o(1),而Count属性是IEnumerable属性,所以程序需要通过集合得到它的计数,即o(n)。

Rank给出了阵列的尺寸。


.Count()井为IEnumerable型、List型或ArrayList型。而LengthArray的。

Rank表示数组的维数。


length是数组的大小count()是数组中的项数(从System.Linq)rank返回维数(a[][]=2,a[]=1)