Как определить размер массива (длину / количество элементов) в C #?
Как определить размер массива (длину / количество элементов) в C #?
Ответы:
Если это одномерный массив a
,
a.Length
даст количество элементов a
.
Если b
это прямоугольный многомерный массив (например, int[,] b = new int[3, 5];
)
b.Rank
даст количество измерений (2) и
b.GetLength(dimensionIndex)
получит длину любого заданного измерения (индексация для измерений на основе 0 - то b.GetLength(0)
есть 3 и b.GetLength(1)
5).
См. Документацию System.Array для получения дополнительной информации.
Как отмечает @Lucero в комментариях, существует концепция «зубчатого массива», который на самом деле представляет собой не более чем одномерный массив (обычно одномерный) массивов.
Например, может быть следующее:
int[][] c = new int[3][];
c[0] = new int[] {1, 2, 3};
c[1] = new int[] {3, 14};
c[2] = new int[] {1, 1, 2, 3, 5, 8, 13};
Обратите внимание, что все 3 элемента c
имеют разную длину. В этом случае, как и прежде c.Length
будет указывать число элементов c
, (3) и c[0].Length
, c[1].Length
и c[2].Length
будет 3, 2 и 7, соответственно.
int[][]
) ;-)
[,]
и [][]
не кажется очевидным для всех новичков .NET, поэтому все же стоит отметить, что [][]
в смысле ваших ответов это не многомерный массив.
b.GetLength[0] is 3 and b.GetLength[1] is 5
должно быть b.GetLength(0) and b.GetLength(1)
.
Вы можете посмотреть документацию по Array, чтобы узнать ответ на этот вопрос.
В этом конкретном случае вам, вероятно, понадобится длина :
int sizeOfArray = array.Length;
Но поскольку это такой простой вопрос, и у вас, несомненно, есть еще много подобных вопросов, вместо того, чтобы просто сказать вам ответ, я лучше расскажу вам, как найти ответ самостоятельно.
Visual Studio Intellisense
Когда вы вводите имя переменной и нажимаете .
клавишу, он показывает вам список всех методов, свойств, событий и т. Д., Доступных для этого объекта. Когда вы выделяете участника, это дает вам краткое описание того, что он делает.
Нажмите F1
Если вы найдете метод или свойство, которые могут делать то, что вы хотите, но вы не уверены, вы можете навести на них курсор и нажать F1, чтобы получить помощь. Здесь вы получите более подробное описание и ссылки на соответствующую информацию.
Поиск
Условия поиска size of array in C#
дают множество ссылок, которые расскажут вам ответ на ваш вопрос, и многое другое. Один из самых важных навыков, которым должен овладеть программист, - это поиск информации. Часто бывает быстрее найти ответ самостоятельно, особенно если тот же вопрос задавался раньше.
Воспользуйтесь учебником
Если вы только начинаете изучать C #, вам будет проще следовать руководству. Я могу порекомендовать учебные пособия по C # на MSDN. Если вам нужна книга, я бы порекомендовал Essential C # .
Переполнение стека
Если вы не можете найти ответ самостоятельно, задайте вопрос на сайте Stack Overflow. Но мы будем признательны, если вы покажете, что в первую очередь постарались найти ответ самостоятельно.
для одномерного массива
int[] listItems = new int[] {2,4,8};
int length = listItems.Length;
для многомерного массива
int length = listItems.Rank;
Чтобы получить размер 1 измерения
int length = listItems.GetLength(0);
Rank
Свойство не возвращает количество элементов, она возвращает количество измерений.
Length
, Rank
, GetLength
)
yourArray.Length
:)
Для одномерного массива вы используете Length
свойство:
int size = theArray.Length;
Для массивов с несколькими измерениями Length
свойство возвращает общее количество элементов в массиве. Вы можете использовать этот GetLength
метод, чтобы получить размер одного из измерений:
int size0 = theArray.GetLength(0);
это выглядит так: 1D:
type[] name=new type[size] //or =new type[]{.....elements...}
2D:
type[][]name=new type[size][] //second brackets are emtpy
тогда, когда вы используете этот массив:
name[i]=new type[size_of_sec.Dim]
или вы можете объявить что-то вроде матрицы
type[ , ] name=new type [size1,size2]
То, что было упущено до сих пор, меня внезапно раздражало:
Как узнать количество элементов в массиве? Является ли .Length
равно .Count
из списка?
Ответ таков: количество элементов типа X, которые были помещены в массив типа X, созданный с помощью, new X[number]
вы должны нести сами !
Например. используя счетчик: int countItemsInArray = 0
и countItemsInArray++
для каждого присвоения вашему массиву.
(В только что созданном массиве new X[number]
есть все пространство для number
элементов (ссылок) типа X, уже выделенных, вы можете назначить любое место внутри в качестве своего первого назначения, например (if number
= 100 и имя переменной = a
) a[50] = new X();
.
Я не знаю, указывает ли C # начальное значение каждого места внутри массива при создании, если это не так, или начальное значение, с которым вы не можете сравнивать (потому что это может быть значение, которое вы сами поместили в массив), вы пришлось бы отслеживать, какие места внутри массива, которому вы уже назначили, тоже, если вы не назначаете последовательно, начиная с 0
(в этом случае все места меньше, чем countItemsInArray
были бы назначены).
В вашем вопросе размер массива (длина / количество элементов) в зависимости от того, предназначен ли / для обозначения «альтернативы» или «деления на», последний по-прежнему должен быть охвачен («количество элементов», которое я только что дал как » количество элементов "и другие, .Length
что соответствует значению number
в моем коде выше):
В C # есть sizeof
оператор ( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof ). Безопасно использовать для встроенных типов (таких как int) (и работает только с типами (а не с переменными)). Таким образом, размер массива b
типа int
в байтах будет b.Length * sizeof(int)
.
(Из-за того, что все пространство массива уже выделено при создании, как упомянуто выше, и sizeof
работает только с типами, никакой код вроде sizeof(variable)/sizeof(type)
бы не будет работать или давать количество элементов без отслеживания.)