【问题标题】:Parse int[] from "1,2,3"从“1,2,3”解析 int[]
【发布时间】:2011-05-26 12:21:03
【问题描述】:

我有一个名为 ID 的多选下拉列表,它提交 ID=1,2,3,我需要将其解析为一个整数数组,以便在过滤方法中执行 Contains()。目前我使用:

string[] ids = Request["ID"].Split(',');

我不太喜欢,因为它比较字符串比比较 int 慢。有什么建议吗?

【问题讨论】:

    标签: c# .net asp.net arrays


    【解决方案1】:
    Request["ID"].Split(',').Select(x=>int.Parse(x)).ToArray();
    

    当然,如果任何生成的数字字符串不是“可解析的”(是否存在这样的单词?),这将抛出。

    【讨论】:

    • 你可以简化,顺便说一句; Request["ID"].Split(',').Select(int.Parse).ToArray();,甚至是Array.ConvertAll(Request["ID"].Split(','), int.Parse)
    【解决方案2】:

    如果转换为整数更快或字符串比较更快,这取决于您将在数组中查找多少次。

    HashSet<int> ids = new HashSet<int>(from s in Request["ID"].Split(',')
                                        select int.Parse(s));
    

    但是如果你有很多 id:s 可能最快的方法是创建一个HashSet&lt;string&gt;:

    HashSet<string> = new HashSet<string>(string[] ids = Request["ID"].Split(','));
    

    【讨论】:

      【解决方案3】:
      int[] ids = Request["ID"].Split(',').Select(Convert.ToInt32).ToArray();
      

      【讨论】:

      • .Select(Convert.ToInt32)
      • @Random: +1 是的,这更简洁。我会更改答案以反映它。
      【解决方案4】:

      第一:

      string[] arr = Request["ID"].Split(',')
      

      然后:

      Array.ConvertAll(arr, s => Int32.Parse(s));
      Array.ConvertAll(arr, Int32.Parse);
      
      arr.Select(s => Int32.Parse(s));
      arr.Select(Int32.Parse);
      

      然后:

      new HashSet<int>(result);
      

      (执行速度最快的容器Contains()

      另见:

      【讨论】:

        【解决方案5】:

        如果你没有 linq,你可以:

        string[] ids = Request["ID"].Split(',');
        int[] items = new int[ids.Length];
        for(int i = 0; i<ids.Length; i++)
        {
          items[i] = int.Parse(ids[i]);
        }
        

        【讨论】:

        • 对于信息,最后 4 行只是:int[] items = Array.ConvertAll(ids, int.Parse);
        • 非常好,继续进行 sigma 扫描! (巴斯光年)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多