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

Oli*_*ops 70 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;
}
Run Code Online (Sandbox Code Playgroud)

JSp*_*ang 200

这篇文章提出了类似的问题,并使用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();
Run Code Online (Sandbox Code Playgroud)

  • langs.Split( ';'),选择(int.Parse).ToArray() (4认同)
  • Convert.ToInt32('1') 返回 49 :) 而不是 1 :) (3认同)

Bug*_*tor 32

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

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


Jus*_*ner 17

s1.Split(';').Select(s => Convert.ToInt32(s)).ToArray();
Run Code Online (Sandbox Code Playgroud)

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

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


Jak*_*urc 17

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

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

  • 使用 `int[] ia = s1.Split(';').Select(s =&gt; int.TryParse(s, out int n) ? n : 0).ToArray();` 对于单行。 (2认同)

Dav*_*ter 8

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

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