Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 означает количество измерений массива.