【问题标题】:Populating a list of integers in .NET在 .NET 中填充整数列表
【发布时间】:2010-09-08 03:09:59
【问题描述】:

我需要一个从 1 到 x 的整数列表,其中 x 由用户设置。我可以使用 for 循环来构建它,例如假设 x 之前是一个整数集:

List<int> iList = new List<int>();
for (int i = 1; i <= x; i++)
{
    iList.Add(i);
}

这似乎很愚蠢,肯定有更优雅的方法来做到这一点,比如PHP range method

【问题讨论】:

    标签: c# .net list integer


    【解决方案1】:

    如果您使用的是 .Net 3.5,Enumerable.Range 就是您所需要的。

    生成一个积分序列 指定范围内的数字。

    【讨论】:

    • 这将返回一个 IEnumerable,而不是 List,所以就像 aku 指出的那样,您需要在 Enumerable.Range(x,y) 调用上调用 .ToList() .
    • 通常最好使用 IEnumerable 以获得最大的灵活性。特别是如果这个列表没有改变它很可能不需要是一个通用的 List
    • 为什么 range 方法比只做一个条件为最大值的简单 for 循环更优雅?
    • 恕我直言,很明显 var List = new List(Max - Min); for (var Index = Min; Index
    【解决方案2】:

    LINQ 救援:

    // Adding value to existing list
    var list = new List<int>();
    list.AddRange(Enumerable.Range(1, x));
    
    // Creating new list
    var list = Enumerable.Range(1, x).ToList();
    

    Generation OperatorsLINQ 101

    【讨论】:

      【解决方案3】:

      我是许多拥有blogged 的人之一,关于 ruby​​ 风格的 To 扩展方法,如果您使用 C#3.0,您可以编写该方法:

      
      public static class IntegerExtensions
      {
          public static IEnumerable<int> To(this int first, int last)
          {
              for (int i = first; i <= last; i++)
      { yield return i; } } }

      然后你可以像这样创建你的整数列表

      List&lt;int&gt; = first.To(last).ToList();

      List&lt;int&gt; = 1.To(x).ToList();

      【讨论】:

      • 其他答案更有可能是提问者想要的,但我在这里投了赞成票,因为我喜欢由此产生的语法。比“1.To(10)”可读性强多少?
      【解决方案4】:

      这是一个返回整数列表的简短方法。

          public static List<int> MakeSequence(int startingValue, int sequenceLength)
          {
              return Enumerable.Range(startingValue, sequenceLength).ToList<int>();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        • 2010-12-01
        • 1970-01-01
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多