Ukuran Array (Panjang) di C #


98

Bagaimana saya bisa menentukan ukuran array (panjang / jumlah item) di C #?


1
@Marcelo: ... tapi masih tidak bisa menjawab pertanyaan yang sangat sederhana seperti "Di mana kacamata saya". ;)
Guffa

2
Apa yang Anda maksud dengan "ukuran"? Jumlah elemen atau ukuran dalam byte?
Fredrik Mörk

2
@fearofawhackplanet Saya memberikan suara positif karena saya memiliki masalah yang sama dalam menemukan Panjang tidak berfungsi untuk array multi-dimensi dan sebagai hasil dari pertanyaan ini menemukan Peringkat dan GetLength (indeks).
TheMathemagician

1
@fearofawhackplanet Saya percaya fakta bahwa ia memiliki 145.000 tampilan adalah bukti relevansinya. Suara positif.
brycejl

Jawaban:


152

Jika itu larik satu dimensi a,

a.Length

akan memberikan jumlah elemen a.

Jika badalah larik multi-dimensi persegi panjang (misalnya, int[,] b = new int[3, 5];)

b.Rank

akan memberikan jumlah dimensi (2) dan

b.GetLength(dimensionIndex)

akan mendapatkan panjang dimensi tertentu (pengindeksan berbasis 0 untuk dimensi - begitu b.GetLength(0)juga 3 dan b.GetLength(1)5).

Lihat dokumentasi System.Array untuk info lebih lanjut.

Seperti yang @Lucero tunjukkan di komentar, ada konsep "larik bergerigi", yang sebenarnya tidak lebih dari larik dimensi tunggal (biasanya satu dimensi).

Misalnya, seseorang dapat memiliki yang berikut ini:

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

Perhatikan bahwa 3 anggota csemuanya memiliki panjang yang berbeda. Dalam hal ini, seperti sebelumnya c.Lengthakan menunjukkan jumlah elemen c, (3) dan c[0].Length, c[1].Lengthdan c[2].Lengthakan 3, 2, dan 7, masing-masing.


1
Untuk kelengkapan Anda juga bisa membuat daftar cara kerja array bergerigi (misalnya int[][]) ;-)
Lucero

Saya menganggapnya, @Lucerno, tetapi menganggapnya masalah yang berbeda - mencari tahu ukuran benda di dalam array - array bergerigi benar-benar hanya array berdimensi tunggal yang kebetulan berisi array berdimensi tunggal, karena saya yakin Anda tahu .
Blair Conrad

3
tentu saja saya tahu bahwa Anda benar dan itulah mengapa saya menambahkan komentar dengan senyuman alih-alih menulis jawaban sendiri. Namun, perbedaan antara [,]dan [][]tampaknya tidak jelas untuk semua pemula NET., Jadi mungkin masih perlu dicatat bahwa [][]itu bukan array multidimensi dalam pengertian jawaban Anda.
Lucero

2
Jawaban yang bagus. Tapi, Anda mungkin ingin mengubah b.GetLength[0] is 3 and b.GetLength[1] is 5harus b.GetLength(0) and b.GetLength(1).
Droogans

29

Anda dapat melihat dokumentasi Array untuk mengetahui jawaban dari pertanyaan ini.

Dalam kasus khusus ini Anda mungkin membutuhkan Panjang :

int sizeOfArray = array.Length;

Tetapi karena ini adalah pertanyaan mendasar dan Anda pasti memiliki lebih banyak pertanyaan seperti ini, daripada hanya memberi tahu Anda jawabannya, saya lebih suka memberi tahu Anda bagaimana menemukan jawabannya sendiri.

Visual Studio Intellisense

Saat Anda mengetik nama variabel dan menekan .tombolnya, Anda akan melihat daftar semua metode, properti, peristiwa, dll. Yang tersedia di objek itu. Saat Anda menyorot seorang anggota, itu memberi Anda deskripsi singkat tentang apa yang dilakukannya.

Tekan F1

Jika Anda menemukan metode atau properti yang mungkin melakukan apa yang Anda inginkan tetapi Anda tidak yakin, Anda dapat memindahkan kursor ke atasnya dan menekan F1 untuk mendapatkan bantuan. Di sini Anda mendapatkan deskripsi yang jauh lebih rinci ditambah tautan ke informasi terkait.

Cari

Istilah penelusuran size of array in C#memberikan banyak tautan yang memberi tahu Anda jawaban atas pertanyaan Anda dan banyak lagi. Salah satu keterampilan terpenting yang harus dipelajari seorang programmer adalah bagaimana menemukan informasi. Seringkali lebih cepat untuk menemukan jawabannya sendiri, terutama jika pertanyaan yang sama telah ditanyakan sebelumnya.

Gunakan tutorial

Jika Anda baru mulai mempelajari C #, Anda akan lebih mudah mengikuti tutorial. Saya dapat merekomendasikan tutorial C # di MSDN. Jika Anda menginginkan sebuah buku, saya merekomendasikan Essential C # .

Stack Overflow

Jika Anda tidak dapat menemukan jawabannya sendiri, silakan posting pertanyaan di Stack Overflow. Tetapi kami menghargai jika Anda menunjukkan bahwa Anda telah berusaha untuk menemukan jawabannya sendiri terlebih dahulu.


3
Kerja bagus, Mark, tapi mungkin berlebihan!
Nayan

1
@Nayan: Terima kasih! Meskipun OP mendapatkan jawabannya dengan cepat dari poster lain sangat bagus, saya merasa lebih penting untuk mengajari pemula cara menemukan informasi daripada mengajari mereka jawaban atas pertanyaan tertentu. Saya berharap OP menemukan jawaban ini berguna dan mereka tidak perlu mengajukan ratusan pertanyaan yang bisa mereka temukan jawabannya sendiri.
Mark Byers

12
+1 untuk meluangkan waktu untuk melakukan pendekatan ini - "beri seseorang ikan ..." dll.
Peter Kelly

Jika saya harus melakukan hal yang sama, saya akan mengarahkan OP ke jawaban Anda di sini =) Dan ya, saya sepenuhnya setuju dengan Anda!
Nayan

1
Ini bagus tapi saya merasa ini harus ditautkan secara otomatis. Tidak bisakah mereka memulai halaman "jawaban yang layak dilihat"? Satu hal yang akan saya tambahkan adalah bahwa seseorang harus memeriksa stack overflow itu sendiri sebelum memposting pertanyaan. Seringkali saya baru mulai memposting pertanyaan dan kemudian melihat pertanyaan terkait yang muncul. Saya tidak yakin apakah jawabannya ada di tempat lain di internet jika bukan di sini juga.
pengguna420667

16

untuk larik 1 dimensi

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

untuk array multidimensi

int length = listItems.Rank;

Untuk mendapatkan ukuran 1 dimensi

int length =  listItems.GetLength(0);

2
The Rankproperti tidak kembali jumlah item, ia mengembalikan jumlah dimensi.
Guffa

Di mana saya dapat menemukan dokumentasi untuk properti yang didukung oleh array 1 dimensi? (yaitu, Length, Rank, GetLength)
Minh Tran


8

Dengan Lengthproperti.

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

5

Untuk array dimensi tunggal, Anda menggunakan Lengthproperti:

int size = theArray.Length;

Untuk beberapa array dimensi, Lengthproperti mengembalikan jumlah item dalam array. Anda dapat menggunakan GetLengthmetode ini untuk mendapatkan ukuran salah satu dimensi:

int size0 = theArray.GetLength(0);

3

Dalam kebanyakan kasus umum, 'Panjang' dan 'Hitungan' digunakan.

Himpunan:

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

Array Daftar yang Diketik:

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

1

bunyinya seperti ini: 1D:

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

2D:

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

lalu saat Anda menggunakan larik ini:

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

atau Anda dapat mendeklarasikan sesuatu seperti matriks

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

0

Apa yang terlewatkan sejauh ini adalah apa yang tiba-tiba membuat saya kesal:

Bagaimana cara mengetahui jumlah item di dalam array? Apakah .Lengthsama .Countdengan Daftar?

Jawabannya adalah: jumlah item tipe X yang telah dimasukkan ke dalam array tipe X yang dibuat dengan new X[number] Anda harus membawanya sendiri !

Misalnya. menggunakan penghitung: int countItemsInArray = 0dan countItemsInArray++untuk setiap tugas ke array Anda.

(Array yang baru saja dibuat new X[number]memiliki semua ruang untuk numberitem (referensi) tipe X sudah dialokasikan, Anda dapat menetapkan ke tempat mana pun di dalamnya sebagai tugas pertama Anda, misalnya (if number= 100 dan nama variabel = a) a[50] = new X();.

Saya tidak tahu apakah C # menentukan nilai awal dari setiap tempat di dalam array saat dibuat, jika tidak atau nilai awal yang tidak dapat Anda bandingkan (karena itu mungkin nilai yang Anda sendiri telah masukkan ke dalam array), Anda harus melacak tempat mana di dalam larik yang sudah Anda tetapkan juga jika Anda tidak menetapkan secara berurutan mulai dari 0(dalam hal ini semua tempat yang lebih kecil daricountItemsInArray akan ditetapkan).)

Dalam pertanyaan Anda, ukuran larik (panjang / jumlah item) tergantung pada apakah / dimaksudkan untuk mewakili "alternatif" atau "bagi dengan" yang terakhir masih harus dicakup ("jumlah item" yang baru saja saya berikan sebagai " jumlah item "dan lainnya yang diberikan .Lengthsesuai dengan nilainumber dalam kode saya di atas):

C # memiliki sizeofoperator ( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof ). Aman digunakan untuk tipe bawaan (seperti int) (dan hanya beroperasi pada tipe (bukan variabel)). Dengan demikian ukuran array btipe intdalam byte akan menjadi b.Length * sizeof(int).

(Karena semua ruang larik telah dialokasikan saat pembuatan, seperti yang disebutkan di atas, dan sizeofhanya bekerja pada jenis, tidak ada kode yang sizeof(variable)/sizeof(type)berfungsi atau menghasilkan jumlah item tanpa pelacakan.)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.