it-roy-ru.com

.net array - разница между "Length", "Count ()" и "Rank"

В чем разница между "Length", "Count ()" и "Rank" для массива .net?

37
Alexandre

Length - это свойство объекта массива, и его использование является наиболее эффективным способом определения количества элементов в массиве ( Array.Length в документации MSDN )

Count() - это метод расширения LINQ, который делает то же самое. Это относится к массивам, потому что массивы являются перечисляемыми объектами. Предпочтительно использовать Length, потому что Count(), вероятно, будет более дорогим (см. этот вопрос для дальнейшего обсуждения и документацию MSDN по количеству для справки)

Rank - это свойство, которое возвращает количество измерений (совсем другое). Когда вы объявляете массив int[,] myArray = new int[5,10];, его Rank будет равен 2, но он будет содержать в общей сложности 50 элементов ( MSDN для свойства Rank ).

Правка: спасибо Корнелие Петак за соответствующие ссылки MSDN.

49
Dyppl
  • Length: Общее количество элементов в массиве
  • LongLength: то же, что Length, но возвращается как long (если>> 231)
  • Count(): LINQ метод расширения, который также работает с другими типами коллекций
  • Rank: Количество измерений в массиве (всегда 1 для векторов). Только в .NET 3.5+.
  • GetLength(), GetLongLength(): длина _ определенного размера массива
  • GetLowerBound(): начальный индекс определенного измерения массива; всегда 0 для векторов
  • GetUpperBound(): конечный индекс определенного измерения массива; всегда Length - 1 для векторов

Интересно, что нет GetLongUpperBound() или GetLongLowerBound()...


Теперь, когда мы обсуждаем эту тему, в чем разница между array и vector в .NET?

Массивы и векторы

Векторы - это то, что вы обычно называете «1D» массивами в C #. Однако одномерные массивы на самом деле не относятся к типу int[], а относятся к типу int[*]. C # не поддерживает их напрямую; однако они могут быть созданы с помощью Array.CreateInstance и могут иметь ненулевые нижние границы. Они, однако, немного медленнее, чем векторы, потому что векторы прямо поддерживаются в CLR. Поскольку одномерные массивы фактически используются редко, C # решил не поддерживать их (хотя он может использовать их с помощью ключевого слова var из другого модуля, который их объявляет!).

20
Mehrdad
  • Length - это свойство, возвращающее количество элементов в Array.
  • Count() - это расширение LINQ, которое делает то же самое с IEnumerable. Необязательно, он может принимать предикат в качестве параметра и возвращать количество элементов, которые его удовлетворяют.
  • Rank - это свойство, возвращающее количество измерений в Array.
2
user703016

Length является свойством Array начиная с C # 1.x

Count() - это метод расширения IEnumerable<T>, потому что теперь каждый T[] реализует IEnumerable<T> неявно.

Обратите внимание, что для массива Count() обычно намного медленнее, чем Length, потому что доступ к свойству Length - это O (1), в то время как Count для IEnumerable<T>, поэтому программе необходимо пройти через коллекцию и получить ее счетчик, то есть На).

Rank дает размеры массива.

1
Danny Chen



0
Fredrik Leijon

Ну, .Count() предназначен для типов IEnumerable, List или ArrayList. В то время как Length для Array.

Rank обозначает количество измерений массива.

0
Robin Maben