.net数组 - “长度”,“计数()”和“等级”之间的差异

时间:2011-07-11 06:22:59

标签: c# .net arrays

.net数组的“长度”,“数量()”和“等级”之间有什么区别?

6 个答案:

答案 0 :(得分:50)

Length是数组对象的属性,使用它是确定数组中元素数量的最有效方法(Array.Length in MSDN documentation

Count()是LINQ扩展方法,它的效果相同。它适用于数组,因为数组是可枚举的对象。最好使用Length因为Count()可能更贵(请参阅this question进一步讨论,MSDN documentation on Count以供参考)

Rank是返回维度数量的属性(完全不同的东西)。声明数组int[,] myArray = new int[5,10];时,Rank数组将为2,但它将包含总共50个元素(MSDN on Rank property)。

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

答案 1 :(得分:20)

  • Length 数组中的元素总数
  • LongLength:与Length相同,但返回为long(如果> = 2 31
  • Count():也适用于其他集合类型的LINQ 扩展方法
  • Rank:数组中维度的数量(对于向量,始终为1)。仅限于.NET 3.5 +。
  • GetLength()GetLongLength()长度 某个维的数组
  • GetLowerBound():数组某个维度的起始索引;始终0为矢量
  • GetUpperBound():数组某个维度的结束索引;始终Length - 1为矢量

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


既然我们正在讨论这个主题,那么.NET中的数组 vector 之间有什么区别?

数组与向量

通常,您在C#中称为“1D”数组。但是,1维数组实际上不是int[]类型,但它们属于int[*]类型。 C#并不直接支持它们;但是,它们可以使用Array.CreateInstance创建,并且可以具有非零下限。然而,它们比矢量稍慢,因为在CLR中直接支持向量。因为实际上很少使用一维数组,所以C#决定不支持它们(尽管可以通过使用var关键字来使用它们,来自另一个声明它们的模块!)

答案 2 :(得分:2)

  • Length是一个返回Array中元素数量的属性。
  • Count()是一个LINQ扩展,在IEnumerable上执行相同操作。 (可选)它可以将谓词作为参数,并返回满足它的元素数。
  • Rank是一个返回Array中维度数量的属性。

答案 3 :(得分:1)

Length是自{C#1.x

以来Array的属性

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

请注意,对于数组,Count()通常比Length 慢得多,因为访问Length属性为O(1),而{{1是Count,因此程序需要遍历集合并获取其计数,即O(n)。

IEnumerable<T>给出了数组的维数。

答案 4 :(得分:0)

长度是数组的大小
Count()是数组中的项目数量(来自system.linq)
Rank返回维数(a [] [] = 2,a [] = 1)

答案 5 :(得分:0)

.Count()适用于IEnumerableListArrayList类型。虽然Length适用于Array

Rank用于表示数组的维数