Sto creando un nuovo elenco C# (List<double>
). C'è un modo, oltre a fare un ciclo sull'elenco, per inizializzare tutti i valori iniziali su 0?Auto-inizializzazione delle liste C#
risposta
Oltre alle soluzioni funzionali previsti (utilizzando i metodi statici sulla classe Enumerable
), si può passare un array di double
s nel costruttore.
var tenDoubles = new List<double>(new double[10]);
Questo funziona perché il valore predefinito di un double
è già 0, e probabilmente svolge un po 'meglio.
Sospetto che funzionerà leggermente peggio. Il costruttore 'List
@SLaks, punto interessante. Suppongo che tu abbia ragione. Probabilmente dipende dalle dimensioni iniziali. Per dimensioni iniziali minori, l'approccio funzionale è probabilmente leggermente più efficiente, in cui le dimensioni iniziali più grandi potrebbero sicuramente migliorare con l'inizializzatore di array. Alla fine, tuttavia, suppongo che l'affermazione delle prestazioni sia probabilmente accademica nella migliore delle ipotesi, poiché probabilmente non farà mai la differenza in una vera app di produzione. –
Una soluzione molto intelligente ed efficiente. –
È possibile utilizzare l'inizializzatore:
var listInt = new List<int> {4, 5, 6, 7};
var listString = new List<string> {"string1", "hello", "world"};
var listCustomObjects = new List<Animal> {new Cat(), new Dog(), new Horse()};
Così si potrebbe utilizzare questo:
var listInt = new List<double> {0.0, 0.0, 0.0, 0.0};
In caso contrario, utilizzando il costruttore di default, l'elenco sarà vuoto.
"Altrimenti, usando il costruttore predefinito, l'Elenco sarà inizializzato con 0 elementi." Per essere chiari, la lista sarà vuota, non che avrà tutte le voci impostate sul valore predefinito. – jason
Scusa ... il mio inglese non è molto bello –
Ricorda che questo funzionerà solo in VS2008/C# 3/VB9 e non nelle versioni precedenti (VS2005/C# 2/VB8) – CraigTP
di questo codice:
Enumerable.Repeat(0d, 25).ToList();
new List<double>(new double[25]); //Array elements default to 0
Penso che questo sia più ciò che l'OP sta cercando. –
Il primo dovrebbe essere var list = Enumerable.Repeat (0d, 25) .ToList(); – jason
Per i tipi più complessi:
List<Customer> listOfCustomers =
new List<Customer> {
{ Id = 1, Name="Dave", City="Sarasota" },
{ Id = 2, Name="John", City="Tampa" },
{ Id = 3, Name="Abe", City="Miami" }
};
da qui: David Hayden's Blog
questo non offre alcun aiuto con i valori di default per i doppi. – ddc0660
Una possibilità è quella di utilizzare :
int capacity;
var list = Enumerable.Range(0, capacity).Select(i => 0d).ToList();
Un altro è:
int capacity;
var list = new List<double>(new double[capacity]);
questo è più simile. –
Ciò è positivo perché il secondo esempio può essere utilizzato in C# 2.0. –
un po 'tardi, ma forse ancora di interesse: utilizzando LINQ, provare
var initializedList = new double[10].ToList()
... speriamo di evitare la copia della lista (che sta a LINQ ora).
Questo dovrebbe essere un commento alla risposta di Michael Meadows, ma mi manca la reputazione.
questo è fattibile, ma gli elenchi in .net non hanno una dimensione definita, quindi il suo tipo di pointletss – DevelopingChris