.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开始, Length
是Array
一个属性
Count()
是IEnumerable<T>
的扩展方法,因为现在每个T[]
隐含地实现IEnumerable<T>
。
请注意,对于一个数组, Count()
通常比Length
要慢很多,因为访问Length
属性是O(1),而Count
是IEnumerable<T>
,所以程序需要经过集合并得到它的数量,是O(n)。
Rank
给出了数组的规模。
长度是数组的大小
Count()是数组中项的数量(来自system.linq)
Rank返回维数(a [] [] = 2,a [] = 1)
那么.Count()
是IEnumerable
, List
或ArrayList
types。 而Length
是Array
。
Rank
是表示数组的维数 。