Tablica dynamiczna w C #


112

Czy istnieje metoda tworzenia tablicy dynamicznej w języku C #?


1
Jeśli nadal utknąłeś w starym błocie, używając [] zamiast List <>, możesz użyć Array.Resize (). Oto dobry przykład. dotnetperls.com/array-resize
Gian

Łącze dotnetperls.com/array-resize nie działa. (FYI)
Su Llewellyn

Odpowiedzi:


150

Spójrz na listy ogólne .


13
Pytanie (choć krótkie i nieopisane) nie dotyczy listy ogólnej - pytanie może dotyczyć dynamic[] msdn.microsoft.com/en-GB/library/dd264736.aspx (tablica typów dynamicznych) lub ExpandoObject msdn.microsoft.com/ en-us / library / ... mogłem -1 odpowiedź na nie wspomnieć o nich
Luke T O'Brien

6
@ LukeTO'Brien, dynamika została wprowadzona w C # 4.0, który został wydany cały rok po zadaniu tego pytania. OP prawdopodobnie pytał o strukturę danych z możliwością zmiany rozmiaru, na przykład en.wikipedia.org/wiki/Dynamic_array
Brian Merrell

6
Odpowiedzi zawierające tylko linki do artykułów nie są pomocne. Nie ma gwarancji, że link pozostanie aktywny.
JamEngulfer

@JamEngulfer To nieprawda. Gdyby tekst jego linku brzmiał „Spójrz na to” z linkiem „to”, zgodziłbym się z tobą. Jeśli usuniesz link i spojrzysz na to, co zostało, odpowiedź OP na „spójrz na ogólne listy” to mnóstwo informacji, które pozwolą przyszłym czytelnikom googlować…
Lynn Crumbling

88

Poszerzenie odpowiedzi Chrisa i Migola o przykład kodu.

Korzystanie z tablicy

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

Korzystanie z listy ogólnej. Pod maską klasa List <T> używa tablicy do przechowywania, ale robi to w sposób, który pozwala jej efektywnie rosnąć.

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

2
ten przykład jest w połowie zły, ponieważ obaj rozmawialiśmy o ArrayList
Migol

21
Ta odpowiedź jest lepsza niż twoja @Migol, ponieważ pokazuje, jak właściwie używać List <>, zamiast po prostu wymieniać ją jako słowo kluczowe. "w połowie zły" -> "w połowie dobry" -> dobry
fhugas

56

Czasami zwykłe tablice są preferowane zamiast list ogólnych, ponieważ są wygodniejsze (lepsza wydajność przy kosztownych obliczeniach - na przykład aplikacje do algebry numerycznej lub do wymiany danych z oprogramowaniem statystycznym, takim jak R lub Matlab)

W takim przypadku możesz użyć metody ToArray () po dynamicznym zainicjowaniu listy

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

string[] array = list.ToArray();

Oczywiście ma to sens tylko wtedy, gdy rozmiar tablicy nigdy nie jest znany ani ustalony ex ante . jeśli znasz już rozmiar swojej tablicy w którymś momencie programu , lepiej zainicjować ją jako tablicę o stałej długości. (Jeśli na przykład pobierasz dane z zestawu wyników, możesz policzyć jego rozmiar i dynamicznie zainicjować tablicę o tym rozmiarze)


1
Nie warto, o ile używasz indeksatora.
aaimnr

2
Ararys nie są wygodniejsze (oferują podzbiór interfejsu List <T>) i oferują prawie taką samą wydajność, ponieważ List <T> używa zwykłej tablicy pod spodem. Iteracja dla elementów 6000000: List / for: 1971ms Array / for: 1864ms (Benchmark ze stackoverflow.com/questions/454916/ ... )
aaimnr

9
Jeśli mają przekazać tablicę do interfejsu to musi być tablicą. Znacznie łatwiej jest zbudować listę, a następnie przekształcić ją w tablicę tuż przed jej przekazaniem. Ta odpowiedź podoba mi się bardziej niż inne, ponieważ dotyczy tego pytania!
Michael Stimson,

36

List<T>dla silnie wpisanego lub ArrayListjeśli masz .NET 1.1 lub lubisz rzutować zmienne.


2

Przykład tablicy dynamicznej:

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

Możesz to zrobić z dynamicznymi obiektami:

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

Użyj listy tablic, która faktycznie implementuje tablicę. Pobiera początkowo tablicę o rozmiarze 4, a kiedy się zapełni, tworzona jest nowa tablica o podwójnym rozmiarze, a dane z pierwszej tablicy są kopiowane do drugiej tablicy, a teraz nowy element jest wstawiany do nowej tablicy. Również nazwa drugiej tablicy tworzy alias pierwszej tablicy, dzięki czemu można uzyskać do niej dostęp pod taką samą nazwą jak poprzednia, a pierwsza tablica zostaje usunięta


1

możesz użyć obiektu arraylist z klasy collections

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

kiedy chcesz dodać element, którego możesz użyć

arr.add();

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.