@Marcelo: ... но он все еще не может ответить на действительно простые вопросы вроде «Где мои очки». ;)
Guffa
2
Что вы имеете в виду под «размером»? Количество элементов или размер в байтах?
Фредрик Мёрк
2
@fearofawhackplanet Я проголосовал за, потому что у меня была такая же проблема с поиском длины, которая не работала для многомерных массивов, и в результате этого вопроса обнаружение Rank и GetLength (index).
TheMathemagician
1
@fearofawhackplanet Я считаю, что тот факт, что у него 145 000 просмотров, свидетельствует о его актуальности. Проголосовали.
brycejl 06
Ответы:
152
Если это одномерный массив 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).
Как отмечает @Lucero в комментариях, существует концепция «зубчатого массива», который на самом деле представляет собой не более чем одномерный массив (обычно одномерный) массивов.
Например, может быть следующее:
int[][] c =newint[3][];
c[0]=newint[]{1,2,3};
c[1]=newint[]{3,14};
c[2]=newint[]{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[][]) ;-)
Лусеро
Я подумал об этом, @Lucerno, но решил, что это другая проблема - выяснение размера вещей внутри массива - зубчатый массив на самом деле просто одномерный массив, который, как я уверен, содержит массивы с одним размером, как я уверен, вы знаете .
Блэр Конрад
3
Конечно, я знаю, что вы правы, и поэтому я добавил комментарий смайликом, вместо того, чтобы писать ответ сам. Однако различие между [,]и [][]не кажется очевидным для всех новичков .NET, поэтому все же стоит отметить, что [][]в смысле ваших ответов это не многомерный массив.
Lucero
2
Хороший ответ. Но, возможно, вы захотите изменить b.GetLength[0] is 3 and b.GetLength[1] is 5должно быть b.GetLength(0) and b.GetLength(1).
В этом конкретном случае вам, вероятно, понадобится длина :
int sizeOfArray =array.Length;
Но поскольку это такой простой вопрос, и у вас, несомненно, есть еще много подобных вопросов, вместо того, чтобы просто сказать вам ответ, я лучше расскажу вам, как найти ответ самостоятельно.
Visual Studio Intellisense
Когда вы вводите имя переменной и нажимаете .клавишу, он показывает вам список всех методов, свойств, событий и т. Д., Доступных для этого объекта. Когда вы выделяете участника, это дает вам краткое описание того, что он делает.
Нажмите F1
Если вы найдете метод или свойство, которые могут делать то, что вы хотите, но вы не уверены, вы можете навести на них курсор и нажать F1, чтобы получить помощь. Здесь вы получите более подробное описание и ссылки на соответствующую информацию.
Поиск
Условия поиска size of array in C#дают множество ссылок, которые расскажут вам ответ на ваш вопрос, и многое другое. Один из самых важных навыков, которым должен овладеть программист, - это поиск информации. Часто бывает быстрее найти ответ самостоятельно, особенно если тот же вопрос задавался раньше.
Воспользуйтесь учебником
Если вы только начинаете изучать C #, вам будет проще следовать руководству. Я могу порекомендовать учебные пособия по C # на MSDN. Если вам нужна книга, я бы порекомендовал Essential C # .
Переполнение стека
Если вы не можете найти ответ самостоятельно, задайте вопрос на сайте Stack Overflow. Но мы будем признательны, если вы покажете, что в первую очередь постарались найти ответ самостоятельно.
@Nayan: Спасибо! Хотя замечательно, что ОП быстро получил ответ от других плакатов, я считаю, что важнее научить новичков находить информацию, а не давать им ответы на конкретные вопросы. Я надеюсь, что ОП сочтет этот ответ полезным и избавит их от необходимости задавать сотни вопросов, на которые они могли бы найти ответы сами.
Марк Байерс
12
+1 за то, что нашел время применить этот подход - «дай человеку рыбу ...» и т. Д.
Питер Келли
Если мне когда-нибудь придется сделать то же самое, я просто перенаправлю OP на ваш ответ здесь =) И да, я полностью с вами согласен!
Nayan
1
Это хорошо, но я считаю, что это должно быть как-то связано автоматически. Разве они не могут открыть страницу с ответами, достойными просмотра? Однако я бы добавил, что перед отправкой вопроса следует проверить переполнение стека. Часто я просто начинаю публиковать вопрос, а затем вижу всплывающие окна с соответствующими вопросами. Я не уверен, существует ли ответ где-нибудь в Интернете, если он тоже не принадлежит здесь.
Для одномерного массива вы используете Lengthсвойство:
int size = theArray.Length;
Для массивов с несколькими измерениями Lengthсвойство возвращает общее количество элементов в массиве. Вы можете использовать этот GetLengthметод, чтобы получить размер одного из измерений:
То, что было упущено до сих пор, меня внезапно раздражало:
Как узнать количество элементов в массиве? Является ли .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в моем коде выше):
(Из-за того, что все пространство массива уже выделено при создании, как упомянуто выше, и sizeofработает только с типами, никакой код вроде sizeof(variable)/sizeof(type)бы не будет работать или давать количество элементов без отслеживания.)
Ответы:
Если это одномерный массив
a
,даст количество элементов
a
.Если
b
это прямоугольный многомерный массив (например,int[,] b = new int[3, 5];
)даст количество измерений (2) и
получит длину любого заданного измерения (индексация для измерений на основе 0 - то
b.GetLength(0)
есть 3 иb.GetLength(1)
5).См. Документацию System.Array для получения дополнительной информации.
Как отмечает @Lucero в комментариях, существует концепция «зубчатого массива», который на самом деле представляет собой не более чем одномерный массив (обычно одномерный) массивов.
Например, может быть следующее:
Обратите внимание, что все 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, чтобы узнать ответ на этот вопрос.
В этом конкретном случае вам, вероятно, понадобится длина :
Но поскольку это такой простой вопрос, и у вас, несомненно, есть еще много подобных вопросов, вместо того, чтобы просто сказать вам ответ, я лучше расскажу вам, как найти ответ самостоятельно.
Visual Studio Intellisense
Когда вы вводите имя переменной и нажимаете
.
клавишу, он показывает вам список всех методов, свойств, событий и т. Д., Доступных для этого объекта. Когда вы выделяете участника, это дает вам краткое описание того, что он делает.Нажмите F1
Если вы найдете метод или свойство, которые могут делать то, что вы хотите, но вы не уверены, вы можете навести на них курсор и нажать F1, чтобы получить помощь. Здесь вы получите более подробное описание и ссылки на соответствующую информацию.
Поиск
Условия поиска
size of array in C#
дают множество ссылок, которые расскажут вам ответ на ваш вопрос, и многое другое. Один из самых важных навыков, которым должен овладеть программист, - это поиск информации. Часто бывает быстрее найти ответ самостоятельно, особенно если тот же вопрос задавался раньше.Воспользуйтесь учебником
Если вы только начинаете изучать C #, вам будет проще следовать руководству. Я могу порекомендовать учебные пособия по C # на MSDN. Если вам нужна книга, я бы порекомендовал Essential C # .
Переполнение стека
Если вы не можете найти ответ самостоятельно, задайте вопрос на сайте Stack Overflow. Но мы будем признательны, если вы покажете, что в первую очередь постарались найти ответ самостоятельно.
источник
для одномерного массива
для многомерного массива
Чтобы получить размер 1 измерения
источник
Rank
Свойство не возвращает количество элементов, она возвращает количество измерений.Length
,Rank
,GetLength
)yourArray.Length
:)источник
С
Length
собственностью.источник
Для одномерного массива вы используете
Length
свойство:Для массивов с несколькими измерениями
Length
свойство возвращает общее количество элементов в массиве. Вы можете использовать этотGetLength
метод, чтобы получить размер одного из измерений:источник
В большинстве случаев используются «Длина» и «Счетчик».
Массив:
Типизированный массив списка:
источник
это выглядит так: 1D:
2D:
тогда, когда вы используете этот массив:
или вы можете объявить что-то вроде матрицы
источник
То, что было упущено до сих пор, меня внезапно раздражало:
Как узнать количество элементов в массиве? Является ли
.Length
равно.Count
из списка?Ответ таков: количество элементов типа X, которые были помещены в массив типа X, созданный с помощью,
new X[number]
вы должны нести сами !Например. используя счетчик:
int countItemsInArray = 0
иcountItemsInArray++
для каждого присвоения вашему массиву.(В только что созданном массиве
new X[number]
есть все пространство дляnumber
элементов (ссылок) типа X, уже выделенных, вы можете назначить любое место внутри в качестве своего первого назначения, например (ifnumber
= 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)
бы не будет работать или давать количество элементов без отслеживания.)источник