.net数组 – “长度”,“计数()”和“等级”

.net数组的“Length”,“Count()”和“Rank”之间有什么区别?

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

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

Rank是返回维数(完全不同的事物)的属性。 当你声明一个数组int[,] myArray = new int[5,10]; 它的Rank将是2,但它将总共包含50个元素( MSDN在Rank属性中 )。

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

  • Length数组 中元素的总数
  • LongLength :与Length相同,但是返回的long (如果大于等于2 31
  • Count() :与其他集合types一起工作的LINQ 扩展方法
  • Rank :数组中的数(对于向量总是为1 )。 只在.NET 3.5以上。
  • GetLength()GetLongLength() :数组某个维度长度
  • GetLowerBound() :数组某一维的起始索引; 对于向量总是0
  • GetUpperBound() :数组某个维度的结束索引; 总是Length - 1为向量

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


现在我们谈论这个话题,.NET中的数组vector有什么区别?

数组与vector

向量是你通常在C#中所谓的“1D”数组。 但是,一维数组实际上不是像int[]这样的types,但是它们的types是int[*] 。 C#不直接支持他们; 但是,它们可以使用Array.CreateInstance创build,并且可以具有非零下限。 但是,它们比vector稍慢,因为vector在CLR中直接支持。 由于一维数组实际上很less使用,因此C#决定不支持它们(尽pipe可以通过使用var关键字,从另一个声明它们的模块中使用它们)。

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

从C#1.x开始, LengthArray一个属性

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

请注意,对于一个数组, Count()通常比Length要慢很多,因为访问Length属性是O(1),而CountIEnumerable<T> ,所以程序需要经过集合并得到它的数量,是O(n)。

Rank给出了数组的规模。

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

那么.Count()IEnumerableListArrayListtypes。 而LengthArray

Rank是表示数组的维数