C# 将字符串[]转换为int[]

C# 将字符串[]转换为int[],c#,arrays,string,integer,C#,Arrays,String,Integer,转换c#中int数组[1,2,3]中字符串数组[“1”、“2”、“3”]的最快方法是什么 谢谢迭代和转换。我建议迭代和int.TryParse() var values = new string[] { "1", "2", "3" }; values.Select(x => Int32.Parse(x)).ToArray(); 请参阅Microsoft的比较我知道这不是一种快捷方式,但您可以使用“快捷方式”: 如果你使用PLink,你可以并行计算这些值 string[] arr1 =

转换c#中int数组[1,2,3]中字符串数组[“1”、“2”、“3”]的最快方法是什么


谢谢

迭代和转换。

我建议迭代和int.TryParse()

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


请参阅Microsoft的比较

我知道这不是一种快捷方式,但您可以使用“快捷方式”:

如果你使用PLink,你可以并行计算这些值

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]);
}
int[]arr2=新的int[arr1.Length];
for(int i=0;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;
                }
        }
    }
public static unsafe int ParseBasicInt32(字符串s)
{
int len=s==null?0:s.长度;
开关(s.长度)
{
案例0:
抛出新参数异常(“s”);
案例1:
{
char c0=s[0];
如果(c0<'0'| c0>'9')抛出新的ArgumentException(“s”);
返回c0-‘0’;
}
案例2:
{
字符c0=s[0],c1=s[1];
如果(c0<'0'| c0>'9'| c1<'0'| c1>'9')抛出新的ArgumentException(“s”);
返回((c0-‘0’)*10)+(c1-‘0’);
}
违约:
固定(字符*字符=s)
{
int值=0;
对于(int i=0;i'9')抛出新的ArgumentException(“s”);
值=(值*10)+(c-‘0’);
}
返回值;
}
}
}
我可能会:

string[] array = new[] { "1", "2" }; // etc.
int[] ints = array.Select(x => int.Parse(x)).ToArray();
如果我能保证数据只是整数

如果没有:

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

    temp.Add(parsed);
}

int[] ints = temp.ToArray();
string[]array=new[]{“1”,“2”};//等
列表温度=新列表();
foreach(数组中的字符串项)
{
int解析;
如果(!int.TryParse(项,未解析))
{
继续;
}
临时添加(已解析);
}
int[]ints=temp.ToArray();

这些项目肯定只是字符串格式的整数吗?请参阅@abatishchev-相关,但可能不是dup;“使用LINQ”!=“最快的”@Marc:你说得对。顺便说一句,OP选择了LINQ:)Int32.TryParse比Int32.parse快,这实际上并没有给出一个数组。。。这不是填充这样一个数组的“最快”(问题)方式。但除此之外……当a)它返回与您要求的不同的数据结构时,以及b)Marc Gravell的答案比这里的任何其他答案都好一个数量级时,这是如何被接受的答案?您可以编写
值。选择(Int32.Parse)为什么要添加lambda包装?它被接受了,但该人员认为它是正确的答案。这不是关于更好/最坏、对/错或其他什么。也许这个问题的措辞不正确?
string[] array = new[] { "1", "2" }; // etc.
List<int> temp = new List<int>();
foreach (string item in array)
{
    int parsed;
    if (!int.TryParse(item, out parsed))
    {
         continue;
    }

    temp.Add(parsed);
}

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