2016-06-12 35 views
5

Sono nel busto in questo momento, ho questo array di stringhe:Come convertire l'array di stringhe in un array lungo?

string[] StringNum = { "4699307989721714673", "4699307989231714673", "4623307989721714673", "4577930798721714673" }; 

ho bisogno di convertirli in tipo di dati a lungo array in C#:

long[] LongNum= { 4699307989721714673, 4699307989231714673, 4623307989721714673, 4577930798721714673 }; 

Ma non ho idea di come, è anche possibile?

risposta

7

È possibile utilizzare semplici funzioni di estensione Linq.

long[] LongNum = StringNum.Select(long.Parse).ToArray(); 

oppure è possibile utilizzare long.TryParse su ogni stringa.

List<long> results = new List<long>(); 
foreach(string s in StringNum) 
{ 
    long val; 

    if(long.TryParse(s, out val)) 
    { 
     results.Add(val); 
    } 
} 

long[] LongNum = results.ToArray(); 
2
var longArray = StringNum.Select(long.Parse).ToArray(); 

enter image description here

3

Probabilmente può essere fatto in meno codice con LINQ, ma qui è il metodo tradizionale: ciclo ogni stringa, convertirlo in un lungo:

var longs = new List<Long>(); 
foreach(var s in StringNum) { 
    longs.Add(Long.Parse(s)); 
} 

return longs.ToArray(); 
1

Se stai cercando il modo più veloce con il più piccolo utilizzo possibile della memoria, quindi qui è

string[] StringNum = { "4699307989721714673", "4699307989231714673", "4623307989721714673", "4577930798721714673" }; 
long[] longNum = new long[StringNum.Length]; 

for (int i = 0; i < StringNum.Length; i++) 
    longNum[i] = long.Parse(StringNum[i]); 

L'utilizzo di new List<long>() è errato perché ogni volta che è necessaria un'espansione, viene ridistribuita molta memoria. È preferibile utilizzare new List<long>(StringNum.Lenght) per allocare memoria sufficiente e prevenire più riallocazioni di memoria. L'allocazione di memoria sufficiente per elencare aumenta le prestazioni, ma poiché è necessario long[] una chiamata in più di ToArray su List<> eseguirà nuovamente l'intera riallocazione della memoria per produrre l'array. D'altra parte si conosce la dimensione dell'output e si può inizialmente creare una matrice e fare l'allocazione di memoria.

0

È possibile iterare l'array string e mantenere la conversione delle stringhe a numerico utilizzando la long.Parse) la funzione (. Si consideri il seguente codice:

string[] StringNum = 
{ "4699307989721714673", 
    "4699307989231714673", 
    "4623307989721714673", 
    "4577930798721714673" }; 

long[] LongNum = new long[4]; 
for(int i=0; i<4; i++){ 
    LongNum[i] = long.Parse(StringNum[i]); 
} 

Questo converte e memorizza ogni string come valore long nel LongNum matrice.

+0

Nota: stavo scrivendo questa risposta mentre @doctor ha pubblicato la sua risposta. Le nostre risposte sono simili ma non ho potuto essere avvisato quando ha postato la sua risposta da quando sono sul cellulare. –

Problemi correlati