C # 'da dinamik dizi


112

C # 'da dinamik dizi oluşturmanın herhangi bir yöntemi var mı?


1
Hala eski çamura saplandıysanız, List <> yerine [] kullanarak Array.Resize () kullanabilirsiniz. İşte güzel bir örnek. dotnetperls.com/array-resize
Gian

Dotnetperls.com/array-resize bağlantısı çalışmıyor. (Bilginize)
Su Llewellyn

Yanıtlar:


150

Genel Listelere bir göz atın .


13
Soru (kısa ve açıklayıcı olmasa da) genel bir liste hakkında soru sormuyor - dynamic[] msdn.microsoft.com/en-GB/library/dd264736.aspx (dinamik türler dizisi) veya ExpandoObject msdn.microsoft.com/ hakkında soru sorulabilir tr-us / library /… Bunlardan bahsetmediğim için cevabı -1 yapabilirdim
Luke T O'Brien

6
@ LukeTO'Brien, dinamikler C # 4.0'da tanıtıldı ve bu sorunun ilk sorulmasından tam bir yıl sonra yayınlandı. OP muhtemelen en.wikipedia.org/wiki/Dynamic_array
Brian Merrell

6
Yalnızca makalelere bağlantı içeren yanıtlar yardımcı değildir. Bağlantının aktif kalacağına dair bir garanti yoktur.
JamEngulfer

@JamEngulfer Bu doğru değil. Bağlantı metni "buna bak" ve "bu" bağlantılı olsaydı, sana katılırdım. Bağlantıyı kaldırırsanız ve geriye kalanlara bakarsanız, OP'nin "genel listelere bir göz atın" cevabı, gelecekteki okuyuculara göz atmak için bol miktarda bilgidir ....
Lynn Crumbling

88

Chris ve Migol'un cevabını bir kod örneği ile genişletiyoruz.

Bir dizi kullanma

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

Genel bir liste kullanmak. Kaputun altında, List <T> sınıfı depolama için bir dizi kullanır, ancak bunu verimli bir şekilde büyümesine izin verecek şekilde yapar.

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

2
bu örnek yarı kötü, çünkü ikimiz de ArrayList
Migol

21
Bu cevap sizinkinden daha iyi @Migol, çünkü bu, Listeyi <> sadece bir anahtar kelime olarak belirtmek yerine nasıl kullanacağınızı gösterir. "yarı-kötü" -> "yarı iyi" -> iyi
fhugas

56

Bazen düz diziler, daha uygun olduklarından Genel Listelere tercih edilir (örneğin, pahalı hesaplama için daha iyi performans - Sayısal Cebir Uygulamaları veya R veya Matlab gibi İstatistik yazılımlarıyla Veri alışverişi için)

Bu durumda Listenizi dinamik olarak başlattıktan sonra ToArray () yöntemini kullanabilirsiniz.

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

string[] array = list.ToArray();

Elbette, bu yalnızca dizinin boyutu hiçbir zaman bilinmiyorsa veya önceden sabit değilse anlamlıdır . Dizinizin boyutunu programın bir noktasında zaten biliyorsanız, onu sabit uzunlukta bir dizi olarak başlatmak daha iyidir. (Örneğin bir ResultSet'ten veri alırsanız, boyutunu hesaplayabilir ve dinamik olarak bu boyutta bir dizi başlatabilirsiniz)


1
İndeksleyici kullandığınız sürece buna değmez.
aaimnr

2
Ararys daha kullanışlı değildir (List <T> arayüzünün alt kümesini sunarlar) ve List <T> altında normal dizi kullandığından neredeyse aynı performansı sunarlar. 6000000 elemanlar için yineleme: Liste / için: 1971ms Dizi / için: 1864ms ( stackoverflow.com/questions/454916/… ' dan kıyaslama )
aaimnr

9
Eğer varsa sahip bir arayüze bir dizi geçirilecek o zaman gereken bir dizi olması. Bir liste oluşturmak ve onu geçmeden hemen önce bir diziye dönüştürmek çok daha kolaydır. Bu yanıtı diğerlerinden daha çok seviyorum çünkü soruyu ele alıyor!
Michael Stimson

36

List<T>kesin olarak yazılmış olanlar için veya ArrayList.NET 1.1'e sahipseniz veya değişkenleri yayınlamayı seviyorsanız


2

Dinamik Dizi Örneği:

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

Bunu dinamik nesnelerle yapabilirsiniz:

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

Aslında dizi gerçekleyen dizi listesini kullanın . Başlangıçta 4 boyutlu diziyi alır ve dolduğunda, çift boyutlu yeni bir dizi oluşturulur ve ilk dizinin verileri ikinci diziye kopyalanır, şimdi yeni öğe yeni diziye eklenir. Ayrıca, ikinci dizinin adı, öncekiyle aynı adla erişilebilmesi ve ilk dizinin elden çıkarılması için bir ilkinin takma adını oluşturur.


1

koleksiyon sınıfından dizi listesi nesnesini kullanabilirsiniz

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

Kullanabileceğiniz element eklemek istediğinizde

arr.add();

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.