2016-06-12 19 views
5

Jestem w biuście w tej chwili, mam tę tablicę ciągów:Jak przekonwertować tablicę ciągów na długą tablicę?

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

trzeba konwertować je do typu danych długo tablicy w C#:

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

Ale nie mam pojęcia, w jaki sposób, czy to możliwe?

Odpowiedz

7

Można użyć prostych funkcji rozszerzenia Linq.

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

lub możesz użyć long.TryParse na każdym ciągu.

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

To prawdopodobnie może być zrobione w mniej kodu z LINQ, ale tutaj jest tradycyjna metoda: pętlę każdy ciąg, przekonwertować go na długo:

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

return longs.ToArray(); 
1

Jeśli szukasz najszybszego sposobu z najmniejszym możliwym wykorzystaniem pamięci, tutaj jest to

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]); 

Korzystanie z jest złe, ponieważ za każdym razem wymaga rozszerzenia, a następnie przydziela dużo pamięci. Lepiej jest użyć new List<long>(StringNum.Lenght), aby przydzielić wystarczającą ilość pamięci i zapobiec ponownemu przydzieleniu pamięci. Przydzielenie wystarczającej ilości pamięci do listy zwiększa wydajność, ale ponieważ potrzebujesz long[], dodatkowe wywołanie ToArray na List<> spowoduje ponowną realokację całej pamięci, aby wytworzyć tablicę. Z drugiej strony znasz rozmiar wyjścia i możesz początkowo utworzyć tablicę i wykonać alokację pamięci.

0

Można iterować po tablicy string i konwertować ciągi na wartości numeryczne za pomocą funkcji long.Parse(). Rozważmy poniższy kod:

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

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

konwertuje i zapisuje to każdy string jako wartość w LongNum tablicy long.

+0

Uwaga: Pisałem tę odpowiedź, gdy @doctor opublikował swoją odpowiedź. Nasze odpowiedzi są podobne, ale nie mogłem zostać powiadomiony, gdy opublikował swoją odpowiedź, odkąd jestem na telefonie komórkowym. –

Powiązane problemy