Розмір масиву (довжина) в C #


98

Як я можу визначити розмір масиву (довжина / кількість елементів) у C #?


1
@Marcelo: ... але він все одно не може відповісти на справді прості запитання на кшталт "Де мої окуляри". ;)
Гуффа

2
Що ви маєте на увазі під "розміром"? Кількість елементів або розмір у байтах?
Фредрік Морк,

2
@fearofawhackplanet Я проголосував за те, що у мене була та сама проблема пошуку довжини, яка не працювала для багатовимірних масивів, і в результаті цього питання було виявлено Rank і GetLength (індекс).
TheMathmagician

1
@fearofawhackplanet Я вважаю, що той факт, що він має 145 000 переглядів, свідчить про його актуальність. Отримано.
brycejl

Відповіді:


152

Якщо це одновимірний масив a,

a.Length

дасть кількість елементів a.

If 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, відповідно.


1
Для повноти ви також могли б перерахувати спосіб роботи зубчастих масивів (наприклад int[][]) ;-)
Lucero

Я розглянув це, @Lucerno, але зрозумів, що це інша проблема - з'ясувати розмір речей у масиві - зубчастий масив насправді є просто одновимірним масивом, який , здається, містить одновимірні масиви, як я впевнений, ви знаєте .
Блер Конрад,

3
звичайно, я знаю, що ти маєш рацію, і тому я додав коментар смайликом замість того, щоб писати відповідь сам. Однак різниця між [,]і [][], здається, не є зрозумілою для всіх початківців .NET, тому, можливо, все-таки варто зауважити, що [][]це не багатовимірний масив у розумінні ваших відповідей.
Lucero

2
Хороша відповідь. Але, ви можете захотіти змінити b.GetLength[0] is 3 and b.GetLength[1] is 5повинно бути b.GetLength(0) and b.GetLength(1).
Другани

29

Ви можете переглянути документацію до Array, щоб знайти відповідь на це питання.

У цьому конкретному випадку вам, мабуть, потрібна довжина :

int sizeOfArray = array.Length;

Але оскільки це настільки основне запитання, і, без сумніву, у вас є набагато більше подібних, а не просто сказати вам відповідь, я краще скажу вам, як знайти відповідь самостійно.

Студія Visual Intellisense

Коли ви вводите ім'я змінної та натискаєте .клавішу, воно відображає список усіх методів, властивостей, подій тощо, доступних для цього об'єкта. Коли ви виділяєте учасника, він дає вам короткий опис того, що він робить.

Натисніть F1

Якщо ви знайдете метод або властивість, які могли б зробити те, що ви хочете, але ви не впевнені, ви можете навести на нього курсор і натиснути F1, щоб отримати допомогу. Тут ви отримаєте набагато детальніший опис, а також посилання на відповідну інформацію.

Пошук

Пошукові терміни size of array in C#містять безліч посилань, які дають відповідь на ваше запитання та багато іншого. Однією з найважливіших навичок, яку повинен засвоїти програміст, є пошук інформації. Часто швидше знайти відповідь самостійно, особливо якщо те саме питання задавали раніше.

Використовуйте підручник

Якщо ви тільки починаєте вивчати C #, вам буде легше дотримуватися навчальних посібників. Я можу порекомендувати підручники з C # з MSDN. Якщо вам потрібна книга, я рекомендую Essential C # .

Переповнення стека

Якщо ви не можете самостійно знайти відповідь, будь ласка, опублікуйте питання на Stack Overflow. Але ми вдячні, якщо ви продемонструєте, що спочатку доклали зусиль, щоб знайти відповідь самі.


3
Гарна робота, Марк, але це може бути надмірним!
Наян

1
@Nayan: Дякую! Хоча чудово, що ОП отримав свою відповідь швидко з інших плакатів, я вважаю, що важливіше навчити початківців, як знаходити інформацію, а не вчити їх відповіді на конкретні питання. Я сподіваюся, що ОП вважає цю відповідь корисною і що це позбавляє їх від необхідності задавати сотні питань, на які вони могли б знайти відповіді самі.
Марк Байєрс,

12
+1 за те, що ви витратили час на такий підхід - "дай людині рибу ..." тощо
Пітер Келлі,

Якщо мені коли-небудь доведеться зробити те саме, я просто перенаправлюю ОП на вашу відповідь тут =) І так, я повністю з вами згоден!
Наян,

1
Це добре, але я вважаю, що це повинно якось пов’язуватись автоматично. Чи не можуть вони розпочати сторінку "відповіді, які варто переглянути"? Одне, що я хотів би додати, це те, що слід перевірити переповнення стека перед тим, як розміщувати питання. Часто я просто починаю розміщувати питання, а потім бачу відповідні запитання, що спливають. Я не впевнений, чи існує відповідь в іншому місці в Інтернеті, якщо він також не належить тут.
user420667

16

для 1-мірного масиву

int[] listItems = new int[] {2,4,8};
int length = listItems.Length;

для багатовимірного масиву

int length = listItems.Rank;

Отримати розмір 1 розмірність

int length =  listItems.GetLength(0);

2
RankВластивість не повертає кількість елементів, вона повертає кількість вимірювань.
Гуффа

Де я можу знайти документацію щодо властивостей, що підтримуються одновимірними масивами? (Тобто Length, Rank, GetLength)
Minh Tran



5

Для одновимірного масиву ви використовуєте Lengthвластивість:

int size = theArray.Length;

Для багатовимірних масивів Lengthвластивість повертає загальну кількість елементів у масиві. Ви можете використовувати GetLengthметод, щоб отримати розмір одного з вимірів:

int size0 = theArray.GetLength(0);

3

У більшості загальних випадків використовуються "довжина" та "кількість".

Масив:

int[] myArray = new int[size];
int noOfElements = myArray.Length;

Введений масив списку:

List <int> myArray = new List<int>();
int noOfElements = myArray.Count;

1

це виглядає так: 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]

0

Дотепер упущено те, що мене раптом роздратувало:

Як дізнатися кількість елементів усередині масиву? Є чи .Lengthодно .Countзі списку?

Відповідь така: кількість предметів типу X, які були поміщені в масив типу X, створений разом з new X[number] вами, ви повинні носити з собою !

Напр. за допомогою лічильника: int countItemsInArray = 0і countItemsInArray++для кожного призначення вашого масиву.

(У щойно створеному масиві new X[number]є весь простір для numberелементів (посилань) типу X, вже виділених, ви можете призначити будь-якому місці всередині як своє перше призначення, наприклад (якщо number= 100 та ім'я змінної = a) a[50] = new X();.

Я не знаю, чи вказує C # початкове значення кожного місця всередині масиву при створенні, якщо це не так, або початкове значення, з яким ви не можете порівняти (оскільки це може бути значення, яке ви самі ввели в масив), ви доведеться відстежувати, які місця всередині масиву ви вже призначили, якщо ви не призначаєте послідовно, починаючи з 0(в цьому випадку всі місця, менші, ніж countItemsInArrayбуло б призначено).)

У вашому запитанні розмір масиву (довжина / кількість елементів) залежно від того , означає / означає "альтернатива" або "розділити на", останній все-таки повинен бути охоплений ("кількість елементів", яку я щойно дав як " кількість предметів "та інші, .Lengthщо відповідає значенню numberв моєму коді вище):

С # має 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)би не працював, або не давав би кількість елементів без відстеження.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.