В чем разница между "Length", "Count()" и "Rank" для массива .net?
.net array - разница между "Length", "Count()" и "Rank"
Ответ 1
Length
является свойством объекта массива и его использование является наиболее эффективным способом определения количества элементов в массиве (Array.Length в MSDN документация)
Count()
- это метод расширения LINQ, который делает то же самое. Он применяется к массивам, потому что массивы являются перечислимыми объектами. Он предпочитал использовать Length
, потому что Count()
, вероятно, будет дороже (см. этот вопрос для дальнейшего обсуждения и документация MSDN по Count для справки)
Rank
- это свойство, которое возвращает количество измерений (совершенно другое). Когда вы объявите массив int[,] myArray = new int[5,10];
, он будет равен Rank
, но он будет содержать в общей сложности 50 элементов (MSDN в свойстве Rank).
EDIT: благодаря Kornelije Petak для соответствующих ссылок MSDN.
Ответ 2
-
Length
: Общее количество элементов в массиве -
LongLength
: То же, что иLength
, но возвращается какlong
(в случае, если он = 2 31) -
Count()
: метод расширения LINQ, который также работает с другими типами коллекций -
Rank
: количество измерений в массиве (всегда1
для векторов). Только в .NET 3.5 +. -
GetLength()
,GetLongLength()
: Длина определенного размера массива -
GetLowerBound()
: начальный индекс определенного измерения массива; всегда0
для векторов -
GetUpperBound()
: Завершение индекса некоторой размерности массива; всегдаLength - 1
для векторов
Интересно, что нет GetLongUpperBound()
или GetLongLowerBound()
...
Теперь, когда мы находимся в теме, в чем разница между массивом и вектором в .NET?
Массивы против векторов
Векторы - это то, что вы обычно называете массивами "1D" в С#. Однако одномерные массивы на самом деле не относятся к типу типа int[]
, но они относятся к типу int[*]
. С# не поддерживает их напрямую; однако они могут быть созданы с помощью Array.CreateInstance
и могут иметь ненулевые нижние границы. Они, однако, немного медленнее, чем векторы, потому что векторы непосредственно поддерживаются в CLR. Поскольку одномерные массивы на самом деле редко используются, С# решил не поддерживать их (хотя они могут использовать их с помощью ключевого слова var
из другого модуля, который их объявляет!).
Ответ 3
-
Length
- свойство, возвращающее число элементов вArray
. -
Count()
- это расширение LINQ, которое делает то же самое наIEnumerable
. Необязательно, он может принимать предикат как параметр и возвращает количество удовлетворяющих ему элементов. -
Rank
- свойство, возвращающее число измерений вArray
.
Ответ 4
Length
является свойством Array
, так как С# 1.x
Count()
- это метод расширения IEnumerable<T>
, потому что теперь каждый T[]
реализует IEnumerable<T>
неявно.
Обратите внимание, что для массива Count()
обычно намного медленнее, чем Length
,, поскольку доступ к свойству Length
равен O (1), а Count
- для IEnumerable<T>
, поэтому программа должна пройти через коллекцию и получить ее счет, то есть O (n).
Rank
дает изменения массива.
Ответ 5
Длина - это размер массива
Count() - количество элементов в массиве (from system.linq)
Ранг возвращает число измерений (a [] [] = 2, a [] = 1)
Ответ 6
Ну .Count()
для типов IEnumerable
, List
или ArrayList
. Пока Length
для Array
.
Rank
означает количество измерений массива.