将string 转换为int

哪个是在c#中int的数组[1,2,3]中转换字符串数组[“1”,“2”,“3”]的最快方法?

谢谢

var values = new string[] { "1", "2", "3" }; values.Select(x => Int32.Parse(x)).ToArray(); 
 string[] arr1 = {"1","2","3"}; int[] arr2 = Array.ConvertAll(arr1, s => int.Parse(s)); 

使用Array.ConvertAll可以确保(与LINQ Select / ToArray )数组以正确的大小进行初始化。 你可以通过展开来更快地获得阴影 ,但不是很多:

 int[] arr2 = new int[arr1.Length]; for(int i = 0 ; i < arr1.Length ; i++) { arr2[i] = int.Parse(arr[i]); } 

如果你还需要更快的东西(也许是批量文件/数据处理),那么编写自己的解析可能会有所帮助; 内置的一个处理很多边缘情况 - 如果你的数据更简单,你真的可以减少一点。


有关替代解析器的示例:

  public static unsafe int ParseBasicInt32(string s) { int len = s == null ? 0 : s.Length; switch(s.Length) { case 0: throw new ArgumentException("s"); case 1: { char c0 = s[0]; if (c0 < '0' || c0 > '9') throw new ArgumentException("s"); return c0 - '0'; } case 2: { char c0 = s[0], c1 = s[1]; if (c0 < '0' || c0 > '9' || c1 < '0' || c1 > '9') throw new ArgumentException("s"); return ((c0 - '0') * 10) + (c1 - '0'); } default: fixed(char* chars = s) { int value = 0; for(int i = 0; i < len ; i++) { char c = chars[i]; if (c < '0' || c > '9') throw new ArgumentException("s"); value = (value * 10) + (c - '0'); } return value; } } } 

我建议迭代和int.TryParse()

处理和转换中哪一个更快int.Parse(),int.TryParse(),Convert.Int32()

请参阅Parse,TryParse和ConvertTo的 Microsoft比较

我可能会这样做:

 string[] array = new[] { "1", "2" }; // etc. int[] ints = array.Select(x => int.Parse(x)).ToArray(); 

如果我能保证数据只是整数。

如果不:

 string[] array = new[] { "1", "2" }; // etc. List temp = new List(); foreach (string item in array) { int parsed; if (!int.TryParse(item, out parsed)) { continue; } temp.Add(parsed); } int[] ints = temp.ToArray(); 

迭代和转换。

这不是我所知道的快捷方式,但你可以使用“短路”:

 var numbers = new[] {"1", "2", "3"}; var result = numbers.Select(s => int.Parse(s)); int[] resultAsArray = result.ToArray(); 

如果您使用PLink,您可以并行计算值。

 string[] arr = new string[]{ "1", "2", "3" }; int[] lss = (from xx in arr select Convert.ToInt32(xx)).ToArray();