使用LINQ将字符串转换为int数组

时间:2010-06-02 15:32:07

标签: c# linq

我有一个函数(tointarray)将字符串转换为int数组,但我对它不是很满意。它完成了这项工作,但必须有一种更优雅的方式来做到这一点,也许LINQ可以在这里提供帮助。不幸的是我在LINQ方面不是很好。还有更好的方法吗?

我的功能:

{
    string s1 = "1;2;3;4;5;6;7;8;9;10;11;12";
    int[] ia = tointarray(s1, ';');
}
int[] tointarray(string value, char sep)
{
    string[] sa = value.Split(sep);
    int[] ia = new int[sa.Length];
    for (int i = 0; i < ia.Length; ++i)
    {
        int j;
        string s = sa[i];
        if (int.TryParse(s, out j))
        {
            ia[i] = j;
        }
    }
    return ia;
}

6 个答案:

答案 0 :(得分:195)

This帖子问了一个类似的问题并使用LINQ来解决它,也许它也会帮助你。

string s1 = "1;2;3;4;5;6;7;8;9;10;11;12";
int[] ia = s1.Split(';').Select(n => Convert.ToInt32(n)).ToArray();

答案 1 :(得分:30)

您可以使用方法组来缩短JSprangs解决方案:

string s1 = "1;2;3;4;5;6;7;8;9;10;11;12";
int[] ints = s1.Split(';').Select(int.Parse).ToArray();

答案 2 :(得分:17)

s1.Split(';').Select(s => Convert.ToInt32(s)).ToArray();

未经测试且脱离我的头脑......现在测试正确的语法。

经过测试,一切看起来都不错。

答案 3 :(得分:16)

实际上正确的一对一实现是:

int n;
int[] ia = s1.Split(';').Select(s => int.TryParse(s, out n) ? n : 0).ToArray();

答案 4 :(得分:7)

以下是过滤掉无效字段的代码:

    var ints = from field in s1.Split(';').Where((x) => { int dummy; return Int32.TryParse(x, out dummy); })
               select Int32.Parse(field);

答案 5 :(得分:1)

    public static int[] ConvertArray(string[] arrayToConvert)
    {
        int[] resultingArray = new int[arrayToConvert.Length];

        int itemValue;

        resultingArray = Array.ConvertAll<string, int>
            (
                arrayToConvert, 
                delegate(string intParameter) 
                {
                    int.TryParse(intParameter, out itemValue);
                    return itemValue;
                }
            );

        return resultingArray;
    }

参考:

http://codepolice.net/convert-string-array-to-int-array-and-vice-versa-in-c/