2016-06-12 77 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

相关问题