【问题标题】:how to load a comma separated numbers to List<int> in c#如何在 C# 中将逗号分隔的数字加载到 List<int>
【发布时间】:2012-01-10 19:23:03
【问题描述】:
string formIdList = "8256, 8258, 8362, 8120, 8270, 8271, 8272, 8273, 8257, 8279, 8212, 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8231, 8232, 8233, 8234, 8235, 8242, 8248, 8251, 8252, 8254, 8255, 8262, 8263, 8264, 8265, 8266, 8290, 8292, 8293, 8294, 8300, 8320, 8230, 8227, 8226, 8225, 8224, 8223, 8222, 8221, 8291, 8261, 8241, 8228, 8220, 8211, 8208, 8207, 8206, 8205, 8204, 8203, 8202, 8201, 8153, 8151, 8150, 8130, 8122, 8000, 8101, 8102, 8103";

var temp = formIdList.Split(',');

List<int> ids = new List<int>();

我需要将 temp 加载到 ids 中。我可以使用 for 循环,但我确信有更好的方法。

【问题讨论】:

标签: c#


【解决方案1】:

你可以使用 LINQ:

string formIdList = ...
List<int> ids = formIdList.Split(',').Select(int.Parse).ToList();

【讨论】:

  • +1 - 我只是在写一个以“你可以使用 LINQ:”开头的答案
  • +1 - 我知道答案是使用 LINQ,但我在等待有人写它:)
  • @Anders:原来的方式很好,不需要创建新的 lambda,int.Parse() 方法很适合委托。
  • @Anders Abel,请不要更新我的答案,我不想像你建议的那样使用.Select(i =&gt; int.Parse(i)),我想像我最初写的那样使用.Select(int.Parse)
  • @DarinDimitrov:对不起,我以为是错字,没有仔细考虑。
【解决方案2】:
List<int> ids = formIdList.Split(',').Select(i=>int.Parse(i)).ToList();

【讨论】:

    【解决方案3】:

    也许你应该使用ids.AddRange(temp) 之类的东西,你试过了吗?

    【讨论】:

      【解决方案4】:

      Linq 非常棒,但您可以通过较少的堆抖动自行完成此操作,并且可以更好地控制您认为可以接受的输入。以下将从逗号分隔并忽略所有空格的任何字符枚举中产生整数。

      public static IEnumerable<int> ParseInts(IEnumerable<char> idList)
      {
          bool valid = false;
          int working = 0;
          foreach (char c in idList)
          {
              if (c >= '0' && c <= '9')
              {
                  valid = true;
                  working = (working*10) + (c - '0');
              }
              else if (c == ',')
              {
                  if(valid)
                      yield return working;
                  valid = false;
                  working = 0;
              }
              else if(!Char.IsWhiteSpace(c))
              {
                  throw new ArgumentOutOfRangeException();
              }
          }
          if (valid)
              yield return working;
      }
      

      然后您可以使用List&lt;int&gt; 构造函数轻松地填充您的整数集合:

      string formIdList = "8256, 8258, 8362";
      List<int> ids = new List<int>(ParseInts(formIdList));
      

      这取决于您打算如何处理、多久输入一次以及输入的大小。对于不经常解析的小数组,我会使用您已经接受的 Linq 方法。对于更高的音量,您可以尝试这样做。

      【讨论】:

        猜你喜欢
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 2012-02-03
        • 2019-12-24
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        • 1970-01-01
        相关资源
        最近更新 更多