Matrice dinamica in C #


112

Esiste un metodo per creare un array dinamico in C #?


1
Se sei ancora bloccato nel vecchio mud, usando [] invece di List <>, puoi usare Array.Resize (). Ecco un buon esempio. dotnetperls.com/array-resize
Gian

Il collegamento dotnetperls.com/array-resize non funziona. (FYI)
Su Llewellyn

Risposte:


150

Dai un'occhiata agli elenchi generici .


13
La domanda (anche se breve e non descrittiva) non riguarda un elenco generico: la domanda potrebbe essere relativa a dynamic[] msdn.microsoft.com/en-GB/library/dd264736.aspx (array di tipi dinamici) o ExpandoObject msdn.microsoft.com/ it-us / library /… Potrei -1 la risposta per non menzionarli
Luke T O'Brien

6
@ LukeTO'Brien, le dinamiche sono state introdotte in C # 4.0, che è stato rilasciato un anno intero dopo che questa domanda è stata inizialmente posta. OP probabilmente stava chiedendo informazioni su una struttura dati ridimensionabile come en.wikipedia.org/wiki/Dynamic_array
Brian Merrell

6
Le risposte costituite solo da collegamenti ad articoli non sono utili. Non vi è alcuna garanzia che il collegamento rimarrà attivo.
JamEngulfer

@JamEngulfer Non è vero. Se il testo del suo collegamento fosse "Guarda questo" con "questo" collegato, sarei d'accordo con te. Se rimuovi il collegamento e guardi cosa è rimasto, la risposta dell'OP a "dai un'occhiata agli elenchi generici" contiene molte informazioni per far sì che qualsiasi lettore futuro possa cercare su Google ...
Lynn Crumbling

88

Espandendo la risposta di Chris e Migol con un esempio di codice.

Utilizzando un array

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

Utilizzando un elenco generico. Dietro le quinte, la classe List <T> utilizza un array per l'archiviazione, ma lo fa in un modo che gli consente di crescere in modo efficiente.

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

2
questo esempio è pessimo, perché entrambi abbiamo parlato di ArrayList
Migol

21
Questa risposta è migliore della tua @Migol, perché mostra come utilizzare effettivamente List <> invece di menzionarla semplicemente come parola chiave. "mezzo cattivo" -> "mezzo buono" -> buono
fhugas

56

A volte gli array semplici sono preferiti agli elenchi generici, poiché sono più convenienti (prestazioni migliori per calcoli costosi, ad esempio applicazioni di algebra numeriche o per lo scambio di dati con software di statistica come R o Matlab)

In questo caso puoi usare il metodo ToArray () dopo aver avviato dinamicamente il tuo List

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

string[] array = list.ToArray();

Ovviamente, questo ha senso solo se la dimensione dell'array non è mai nota né fissata ex ante . se conosci già la dimensione del tuo array ad un certo punto del programma è meglio iniziarlo come array a lunghezza fissa. (Se recuperi i dati da un ResultSet, ad esempio, puoi contare la sua dimensione e avviare un array di quella dimensione, dinamicamente)


1
Non ne vale la pena, a patto che utilizzi l'indicizzatore.
aaimnr

2
Gli array non sono più convenienti (offrono un sottoinsieme dell'interfaccia List <T>) e offrono quasi le stesse prestazioni, poiché List <T> utilizza un array normale sottostante. Iterazione per 6000000 elementi: Elenco / Per: 1971ms Array / Per: 1864ms (benchmark da stackoverflow.com/questions/454916/... )
aaimnr

9
Se si dispone di passare un array a un'interfaccia allora deve essere un array. È molto più facile creare un elenco e poi trasformarlo in un array appena prima di passarlo. Questa risposta mi piace più delle altre perché affronta la domanda!
Michael Stimson

36

List<T>per quelli fortemente tipizzati, o ArrayListse hai .NET 1.1 o ti piace eseguire il cast delle variabili.


2

Esempio di array dinamico:

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

Puoi farlo con oggetti dinamici:

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

Usa l' elenco degli array che in realtà implementa l'array. Richiede inizialmente un array di dimensione 4 e quando è pieno, viene creato un nuovo array con la sua doppia dimensione ei dati del primo array vengono copiati nel secondo array, ora il nuovo elemento viene inserito nel nuovo array. Anche il nome del secondo array crea un alias del primo in modo che sia possibile accedervi con lo stesso nome del precedente e il primo array venga eliminato


1

puoi usare un oggetto arraylist dalla classe collections

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

quando vuoi aggiungere un elemento puoi usare

arr.add();

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.