Array dinamis di C #


112

Apakah ada metode untuk membuat array dinamis di C #?


1
Jika Anda masih terjebak di lumpur lama, dengan menggunakan [] sebagai gantinya jika Daftar <>, Anda dapat menggunakan Array.Resize (). Ini contoh yang bagus. dotnetperls.com/array-resize
Gian

Tautan dotnetperls.com/array-resize tidak berfungsi. (FYI)
Su Llewellyn

Jawaban:


150

Lihat Daftar Umum .


13
Pertanyaan (meskipun singkat dan tidak deskriptif) tidak menanyakan tentang daftar umum - Pertanyaan dapat diajukan tentang dynamic[] msdn.microsoft.com/en-GB/library/dd264736.aspx (array tipe dinamis) atau ExpandoObject msdn.microsoft.com/ id-us / library /… Saya bisa -1 jawaban karena tidak menyebutkan ini
Luke T O'Brien

6
@ LukeTO'Brien, dinamika diperkenalkan di C # 4.0, yang dirilis setahun penuh setelah pertanyaan ini awalnya diajukan. OP mungkin bertanya tentang struktur data yang dapat diubah ukurannya seperti en.wikipedia.org/wiki/Dynamic_array
Brian Merrell

6
Jawaban yang hanya terdiri dari tautan ke artikel tidak membantu. Tidak ada jaminan tautan akan tetap aktif.
JamEngulfer

@JamEngulfer Itu tidak benar. Jika teks tautannya adalah "Lihat ini" dengan tautan "ini", saya setuju dengan Anda. Jika Anda menghapus tautan, dan melihat apa yang tersisa, jawaban OP untuk "lihat daftar umum" adalah banyak informasi untuk mendapatkan pembaca mendatang di Google ....
Lynn Crumbling

88

Memperluas jawaban Chris dan Migol dengan contoh kode.

Menggunakan array

Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");

Menggunakan daftar umum. Di balik terpal, kelas List <T> menggunakan larik untuk penyimpanan tetapi melakukannya dengan cara yang memungkinkannya berkembang secara efisien.

List<Student> list = new List<Student>();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];

2
contoh ini setengah buruk, karena kami berdua berbicara tentang ArrayList
Migol

21
Jawaban ini lebih baik daripada milik Anda @Migol, karena ini menunjukkan bagaimana sebenarnya menggunakan Daftar <> daripada hanya menyebutkannya sebagai kata kunci. "setengah buruk" -> "setengah baik" -> baik
fhugas

56

Terkadang array biasa lebih disukai daripada Daftar Generik, karena lebih nyaman (Performa yang lebih baik untuk komputasi yang mahal - Aplikasi Aljabar Angka misalnya, atau untuk bertukar Data dengan perangkat lunak Statistik seperti R atau Matlab)

Dalam hal ini Anda dapat menggunakan metode ToArray () setelah memulai Daftar Anda secara dinamis

List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");

string[] array = list.ToArray();

Tentu saja, ini masuk akal hanya jika ukuran array tidak pernah diketahui atau diperbaiki ex-ante . jika Anda sudah mengetahui ukuran array Anda di beberapa titik program , lebih baik untuk memulainya sebagai array dengan panjang tetap. (Jika Anda mengambil data dari ResultSet misalnya, Anda bisa menghitung ukurannya dan memulai array dengan ukuran itu, secara dinamis)


1
Tidak layak, selama Anda menggunakan pengindeks.
aaimnr

2
Arary tidak lebih nyaman (mereka menawarkan subset dari antarmuka Daftar <T>) dan menawarkan kinerja yang hampir sama, karena Daftar <T> menggunakan array biasa di bawahnya. Iterasi untuk 6000000 elemen: Daftar / untuk: 1971ms Array / untuk: 1864ms (Tolok ukur dari stackoverflow.com/questions/454916/… )
aaimnr

9
Jika Anda harus meneruskan sebuah array ke sebuah antarmuka maka itu haruslah sebuah array. Jauh lebih mudah untuk membuat daftar dan kemudian membuatnya menjadi sebuah array sebelum Anda meneruskannya. Saya menyukai jawaban ini lebih dari yang lain karena menjawab pertanyaan!
Michael Stimson

36

List<T>untuk tipe yang sangat diketik, atau ArrayListjika Anda memiliki .NET 1.1 atau suka memasukkan variabel.


2

Contoh Dynamic Array:

Console.WriteLine("Define Array Size? ");
int number = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Enter numbers:\n");
int[] arr = new int[number];

for (int i = 0; i < number; i++)
{
    arr[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < arr.Length; i++ )
{
    Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString());
}
Console.ReadKey();

2

Anda dapat melakukan ini dengan objek dinamis:

var dynamicKeyValueArray = new[] { new {Key = "K1", Value = 10}, new {Key = "K2", Value = 5} };

foreach(var keyvalue in dynamicKeyValueArray)
{
    Console.Log(keyvalue.Key);
    Console.Log(keyvalue.Value);
}

1

Gunakan daftar array yang sebenarnya mengimplementasikan array. Awalnya dibutuhkan array berukuran 4 dan ketika sudah penuh, array baru dibuat dengan ukuran ganda dan data dari array pertama disalin ke array kedua, sekarang item baru dimasukkan ke dalam array baru. Juga nama larik kedua membuat alias dari yang pertama sehingga dapat diakses dengan nama yang sama seperti sebelumnya dan larik pertama dibuang


1

Anda dapat menggunakan objek arraylist dari kelas koleksi

using system.collections;
   static void main()
        {
        Arrylist arr=new Arrylist();
         }

ketika Anda ingin menambahkan elemen yang dapat Anda gunakan

arr.add();

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.