【问题标题】:Convert string to int array using LINQ [duplicate]使用 LINQ 将字符串转换为 int 数组 [重复]
【发布时间】:2010-06-02 15:32:06
【问题描述】:

我有一个函数(tointarray)将一个字符串转换为一个整数数组,但我对它不是很满意。它可以完成这项工作,但必须有一种更优雅的方式来做到这一点,也许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;
}

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    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();
    

    【讨论】:

    • @Femaref 说得很好!谢谢...
    • langs.Split(';').Select(int.Parse).ToArray()
    • Convert.ToInt32('1') 返回 49 :) 而不是 1 :)
    • 调用 Convert.ToInt32 不会转换数字,而是转换字符代码点...查看您的答案:D
    【解决方案2】:

    您可以改用方法组来稍微缩短 JSprangs 解决方案:

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

    【讨论】:

      【解决方案3】:

      其实正确的一对一实现是:

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

      【讨论】:

      • 单行使用int[] ia = s1.Split(';').Select(s =&gt; int.TryParse(s, out int n) ? n : 0).ToArray();。
      【解决方案4】:
      s1.Split(';').Select(s => Convert.ToInt32(s)).ToArray();
      

      未经测试,我想不通...现在正在测试正确的语法。

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

      【讨论】:

      • 你不能这样做吗:s1.Split(';').Select(Convert.ToInt32).ToArray();
      • @strager - 不,该语句无法编译。
      • @strager,显然你不能使用.Net 4.0。你在用 Python 做梦;)
      • 不,我在 Javascript 上花费了太多时间。 =]
      • 它通常会起作用,因为方法名称将被转换为正确的 Func/predicate/delegate。它不适用于 Convert.ToInt32 的原因是因为 Convert(string,int) 重载会混淆类型推断。 s1.Split(';').Select((Func&lt;string,int&gt;)Convert.ToInt32).ToArray() 可以正常工作,但代码并没有减少
      【解决方案5】:

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

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

      【讨论】:

      • +1 我一直在滚动,试图找到与 OPs 代码等效的解决方案。不幸的是,这效率较低,因为它必须解析 int 两次。
      【解决方案6】:
          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/

      【讨论】:

        猜你喜欢
        • 2014-03-23
        • 2014-07-05
        • 1970-01-01
        • 2015-06-18
        • 2017-05-07
        • 1970-01-01
        • 2012-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多