Rozmiar tablicy (długość) w C #


98

Jak mogę określić rozmiar tablicy (długość / liczbę elementów) w C #?


1
@Marcelo: ... ale nadal nie mogę odpowiedzieć na naprawdę proste pytania, takie jak „Gdzie są moje okulary”. ;)
Guffa

2
Co masz na myśli mówiąc o „rozmiarze”? Liczba elementów lub rozmiar w bajtach?
Fredrik Mörk

2
@fearofawhackplanet Głosowałem za mną, ponieważ miałem ten sam problem ze znalezieniem Długość nie działała dla wielowymiarowych tablic iw wyniku tego pytania odkryłem Rank i GetLength (indeks).
TheMathemagician

1
@fearofawhackplanet Wierzę, że fakt, że ma 145 000 wyświetleń, jest świadectwem jego trafności. Głosowano za.
brycejl

Odpowiedzi:


152

Jeśli jest to tablica jednowymiarowa a,

a.Length

poda liczbę elementów a.

Jeśli bjest prostokątną tablicą wielowymiarową (na przykład int[,] b = new int[3, 5];)

b.Rank

poda liczbę wymiarów (2) i

b.GetLength(dimensionIndex)

otrzyma długość dowolnego podanego wymiaru (indeksowanie na podstawie 0 dla wymiarów - więc b.GetLength(0)wynosi 3 i b.GetLength(1)wynosi 5).

Aby uzyskać więcej informacji, zobacz dokumentację System.Array .

Jak @Lucero wskazuje w komentarzach, istnieje koncepcja „tablicy postrzępionej”, która w rzeczywistości jest niczym innym jak jednowymiarową tablicą (zazwyczaj jednowymiarowych) tablic.

Na przykład, można mieć:

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};

Zwróć uwagę, że wszystkie 3 elementy cmają różne długości. W tym przypadku jak poprzednio c.Lengthwskazuje liczbę elementów c(3), i c[0].Length, c[1].Length, a c[2].Lengthwynosi 3, 2 i 7, odpowiednio.


1
Dla kompletności możesz również wymienić sposób działania tablic postrzępionych (np. int[][]) ;-)
Lucero

Rozważałem to, @Lucerno, ale pomyślałem, że to inny problem - ustalenie rozmiaru rzeczy wewnątrz tablicy - tablica postrzępiona to tak naprawdę tablica jednowymiarowa, która zawiera tablice o pojedynczym wymiarze, jak jestem pewien, że wiesz .
Blair Conrad

3
oczywiście wiem, że masz rację i dlatego dodałem komentarz z uśmiechem zamiast samodzielnie pisać odpowiedź. Jednak rozróżnienie między [,]i [][]nie wydaje się być jasne dla wszystkich początkujących użytkowników .NET, więc nadal warto zauważyć, że [][]nie jest to wielowymiarowa tablica w sensie odpowiedzi.
Lucero

2
Dobra odpowiedź. Ale, może chcesz zmienić b.GetLength[0] is 3 and b.GetLength[1] is 5powinno być b.GetLength(0) and b.GetLength(1).
Droogans

29

Możesz zajrzeć do dokumentacji Array, aby znaleźć odpowiedź na to pytanie.

W tym konkretnym przypadku prawdopodobnie potrzebujesz Długość :

int sizeOfArray = array.Length;

Ale ponieważ jest to takie podstawowe pytanie i bez wątpienia masz o wiele więcej takich pytań, zamiast po prostu odpowiadać, wolałbym raczej powiedzieć, jak samemu znaleźć odpowiedź.

Visual Studio Intellisense

Po wpisaniu nazwy zmiennej i naciśnięciu .klawisza wyświetli się lista wszystkich metod, właściwości, zdarzeń itp. Dostępnych dla tego obiektu. Kiedy wyróżnisz członka, otrzymasz krótki opis tego, co robi.

Naciśnij klawisz F1

Jeśli znajdziesz metodę lub właściwość, która może zrobić to, co chcesz, ale nie masz pewności, możesz najechać na nią kursorem i nacisnąć klawisz F1, aby uzyskać pomoc. Tutaj znajdziesz znacznie bardziej szczegółowy opis oraz linki do powiązanych informacji.

Szukaj

Wyszukiwane hasła size of array in C#zawierają wiele linków, które zawierają odpowiedź na Twoje pytanie i nie tylko. Jedną z najważniejszych umiejętności, których musi nauczyć się programista, jest znajdowanie informacji. Często szybsze jest samodzielne znalezienie odpowiedzi, zwłaszcza jeśli zadawano to samo pytanie.

Skorzystaj z samouczka

Jeśli dopiero zaczynasz uczyć się języka C #, łatwiej będzie Ci skorzystać z samouczka. Mogę polecić samouczki C # w witrynie MSDN. Jeśli chcesz książkę, polecam Essential C # .

Przepełnienie stosu

Jeśli nie jesteś w stanie samodzielnie znaleźć odpowiedzi, nie wahaj się zadać pytania na stronie Stack Overflow. Ale będziemy wdzięczni, jeśli pokażesz, że podjąłeś wysiłek, aby samemu znaleźć odpowiedź.


3
Dobra robota, Mark, ale może to być przesada!
Nayan

1
@Nayan: Dzięki! Chociaż to wspaniałe, że OP szybko uzyskał odpowiedź z innych plakatów, uważam, że ważniejsze jest nauczenie początkujących, jak znajdować informacje, niż uczyć ich odpowiedzi na określone pytania. Mam nadzieję, że OP uzna tę odpowiedź za przydatną i że oszczędza im konieczności zadawania setek pytań, na które mogliby znaleźć odpowiedzi na siebie.
Mark Byers

12
+1 za poświęcenie czasu na takie podejście - „daj człowiekowi rybę…” itd.
Peter Kelly

Jeśli kiedykolwiek będę musiał zrobić to samo, po prostu przekieruję PO do twojej odpowiedzi tutaj =) I tak, całkowicie się z tobą zgadzam!
Nayan

1
To jest dobre, ale czuję, że powinno być jakoś automatycznie połączone. Czy nie mogą rozpocząć strony z „odpowiedziami, które warto przejrzeć”? Jedną rzeczą, którą chciałbym dodać, jest to, że przed wysłaniem pytania należy sprawdzić przepełnienie stosu. Często po prostu zaczynam publikować pytanie, a następnie widzę w wyskakującym okienku powiązane pytania. Nie jestem pewien, czy odpowiedź istnieje gdzie indziej w Internecie, jeśli nie należy jej również tutaj.
user420667

16

dla 1-wymiarowej tablicy

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

dla tablicy wielowymiarowej

int length = listItems.Rank;

Aby uzyskać rozmiar 1 wymiaru

int length =  listItems.GetLength(0);

2
RankNieruchomość nie zwraca liczbę elementów, zwraca liczbę wymiarów.
Guffa,

Gdzie mogę znaleźć dokumentację dotyczącą właściwości obsługiwanych przez tablice 1-wymiarowe? (czyli Length, Rank, GetLength)
Minh Tran


8

Z Lengthnieruchomością.

int[] foo = new int[10];
int n = foo.Length; // n == 10

5

Dla tablicy jednowymiarowej używasz Lengthwłaściwości:

int size = theArray.Length;

W przypadku tablic wielowymiarowych Lengthwłaściwość zwraca całkowitą liczbę elementów w tablicy. Możesz skorzystać z GetLengthmetody, aby uzyskać rozmiar jednego z wymiarów:

int size0 = theArray.GetLength(0);

3

W większości przypadków używa się „Długość” i „Liczba”.

Szyk:

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

Tablica listy wpisywanej:

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

1

wygląda to tak: 1D:

 type[] name=new type[size]  //or =new type[]{.....elements...}

2D:

 type[][]name=new type[size][] //second brackets are emtpy

wtedy jak używasz tej tablicy:

 name[i]=new type[size_of_sec.Dim]

lub możesz zadeklarować coś w rodzaju macierzy

type[ , ] name=new type [size1,size2]

0

To, czego dotychczas brakowało, to to, co mnie nagle zirytowało:

Skąd mam wiedzieć, ile elementów znajduje się w tablicy? Czy .Lengthrówna .Countsię liście?

Odpowiedź brzmi: ilość elementów typu X, które zostały umieszczone w utworzonej tablicy typu X new X[number] , musisz nieść !

Na przykład. używając licznika: int countItemsInArray = 0i countItemsInArray++dla każdego przypisania do twojej tablicy.

(Tablica właśnie utworzona z new X[number]ma numberjuż przydzielone miejsce na elementy (referencje) typu X, możesz przypisać do dowolnego miejsca wewnątrz jako pierwsze przypisanie, na przykład (jeśli number= 100 i nazwa zmiennej = a) a[50] = new X();.

Nie wiem, czy C # określa początkową wartość każdego miejsca wewnątrz tablicy przy tworzeniu, jeśli tak nie jest, czy też wartość początkową, z którą nie można porównać (ponieważ może to być wartość, którą sam umieściłeś w tablicy), musiałby również śledzić, do których miejsc w tablicy już przypisałeś, jeśli nie przypiszesz kolejno, zaczynając od 0(w takim przypadku wszystkie miejsca mniejsze niż countItemsInArraybyłyby przypisane).)

W pytaniu rozmiar tablicy (długość / liczba elementów) w zależności od tego, czy / ma oznaczać „alternatywę”, czy „podziel przez”, musi być jeszcze uwzględniony („liczba elementów”, które właśnie podałem jako „ ilość pozycji "i innych .Lengthpodanych co odpowiada wartości numberw moim kodzie powyżej):

C # ma sizeofoperator ( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof ). Jest bezpieczny w użyciu dla typów wbudowanych (takich jak int) (i działa tylko na typach (nie na zmiennych)). Zatem rozmiar tablicy btypu intw bajtach byłby b.Length * sizeof(int).

(Ze względu na to, że cała przestrzeń tablicy jest już przydzielona podczas tworzenia, jak wspomniano powyżej, i sizeofdziała tylko na typach, żaden kod nie sizeof(variable)/sizeof(type)działałby ani nie generował ilości elementów bez śledzenia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.