2016-06-12 99 views
5

我在破產的那一刻,我有這樣的字符串數組:如何將字符串數組轉換爲長數組?

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

我需要將它們轉換爲多頭排列的數據類型在C#:

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

但我不知道怎麼樣,它甚至有可能嗎?

回答

7

您可以使用簡單的Linq擴展功能。您可以在每個字符串上使用long.TryParse

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

它也許可以在使用LINQ更少的代碼來完成,但這裏的傳統方法:循環每個字符串,將其轉換爲長:

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

return longs.ToArray(); 
1

如果你正在尋找最小的內存使用可能的最快方式,那麼這裏是

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

使用new List<long>()很糟糕,因爲每次需要擴展時都會重新分配大量內存。最好使用new List<long>(StringNum.Lenght)分配足夠的內存並防止多次內存重新分配。分配足夠的內存以增加性能,但由於您需要long[] 的另一個呼叫List<>將再次執行整個內存重新分配以生成陣列。另一方面,你知道輸出的大小,你可以初始創建一個數組並進行內存分配。

0

您可以遍歷string數組,並使用long.Parse()函數繼續將字符串轉換爲數字。考慮下面的代碼:

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

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

此轉換並存儲每個stringLongNum陣列中的long值。

+0

注:我正在寫這個答案,而@doctor張貼他的答案。我們的答案很相似,但自從我使用移動設備發佈他的答案後,我無法收到通知。 – 2016-06-12 15:01:51