@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).
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 =newint[3][];
c[0]=newint[]{1,2,3};
c[1]=newint[]{3,14};
c[2]=newint[]{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.
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).
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ź.
@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.
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:
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):
(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.
Odpowiedzi:
Jeśli jest to tablica jednowymiarowa
a
,poda liczbę elementów
a
.Jeśli
b
jest prostokątną tablicą wielowymiarową (na przykładint[,] b = new int[3, 5];
)poda liczbę wymiarów (2) i
otrzyma długość dowolnego podanego wymiaru (indeksowanie na podstawie 0 dla wymiarów - więc
b.GetLength(0)
wynosi 3 ib.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ć:
Zwróć uwagę, że wszystkie 3 elementy
c
mają różne długości. W tym przypadku jak poprzednioc.Length
wskazuje liczbę elementówc
(3), ic[0].Length
,c[1].Length
, ac[2].Length
wynosi 3, 2 i 7, odpowiednio.źródło
int[][]
) ;-)[,]
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.b.GetLength[0] is 3 and b.GetLength[1] is 5
powinno byćb.GetLength(0) and b.GetLength(1)
.Możesz zajrzeć do dokumentacji Array, aby znaleźć odpowiedź na to pytanie.
W tym konkretnym przypadku prawdopodobnie potrzebujesz Długość :
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ź.
źródło
dla 1-wymiarowej tablicy
dla tablicy wielowymiarowej
Aby uzyskać rozmiar 1 wymiaru
źródło
Rank
Nieruchomość nie zwraca liczbę elementów, zwraca liczbę wymiarów.Length
,Rank
,GetLength
)yourArray.Length
:)źródło
Z
Length
nieruchomością.źródło
Dla tablicy jednowymiarowej używasz
Length
właściwości:W przypadku tablic wielowymiarowych
Length
właściwość zwraca całkowitą liczbę elementów w tablicy. Możesz skorzystać zGetLength
metody, aby uzyskać rozmiar jednego z wymiarów:źródło
W większości przypadków używa się „Długość” i „Liczba”.
Szyk:
Tablica listy wpisywanej:
źródło
wygląda to tak: 1D:
2D:
wtedy jak używasz tej tablicy:
lub możesz zadeklarować coś w rodzaju macierzy
źródło
To, czego dotychczas brakowało, to to, co mnie nagle zirytowało:
Skąd mam wiedzieć, ile elementów znajduje się w tablicy? Czy
.Length
równa.Count
się 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 = 0
icountItemsInArray++
dla każdego przypisania do twojej tablicy.(Tablica właśnie utworzona z
new X[number]
manumber
już przydzielone miejsce na elementy (referencje) typu X, możesz przypisać do dowolnego miejsca wewnątrz jako pierwsze przypisanie, na przykład (jeślinumber
= 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żcountItemsInArray
był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
.Length
podanych co odpowiada wartościnumber
w moim kodzie powyżej):C # ma
sizeof
operator ( 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 tablicyb
typuint
w bajtach byłbyb.Length * sizeof(int)
.(Ze względu na to, że cała przestrzeń tablicy jest już przydzielona podczas tworzenia, jak wspomniano powyżej, i
sizeof
działa tylko na typach, żaden kod niesizeof(variable)/sizeof(type)
działałby ani nie generował ilości elementów bez śledzenia.źródło