代码之家  ›  专栏  ›  技术社区  ›  Centurion

Java中PHP的range函数

  •  4
  • Centurion  · 技术社区  · 14 年前

    PHP的range函数在PHP中的工作方式如下:

    $leap_years = range(1900, 2000, 4);
    

    1900, 1904, 1908, ... 在Java中有类似的简单的东西吗?

    3 回复  |  直到 14 年前
        1
  •  4
  •   ColinD    14 年前

    没有任何内置的功能,但是实现一个不可变的范围是相对简单的 Iterable<Long> (或 Integer Iterator 从起始值开始,然后每次调用 next() 直到你传递结束值。您必须决定如何以及是否要处理从高到低的迭代等等,但这并不难。您还可以将其作为 List 其中每个指数的值是按需计算的( start + index * increment ).

    两次 创建数组或 列表 然后读它。如我所述,使用惰性范围迭代器并没有这个缺点。另外,一个懒惰的迭代器可以很容易地复制到 如果你想让所有的值直接存储在内存中。与构建阵列相比,它的唯一缺点是一些自动装箱开销。

        2
  •  3
  •   Martijn Courteaux    12 年前

    你应该这样做:

    public int[] range(int start, int end, int increment) {
       if (start < end && increment < 0) throw new IllegalArgumentException();
       if (start > end && increment > 0) throw new IllegalArgumentException();
    
       int[] values = new int[Math.abs((end - start) / increment) + 1];
       boolean reverse = start > end;
    
       for (int i = start, index = 0; reverse ? (i >= end) : (i <= end); i+=increment, ++index)
       {
           values[index] = i;
       }
       return values;
    }
    
        3
  •  1
  •   Richard Marskell - Drackir Sunil Tandon    14 年前

    你可以这样模拟:

    public int[] range(int startVal, int endVal, int increment) {
      if (startVal >= endVal) {
        //handle error or add option to go backwards
      }
      int count = ((endval - startval) / increment) + 1;
      int[] myArr = new int[count];
      for (int i=0; i <= count; i++) {
        myArr[i] = startVal + (i * increment);
      }
      return myArr;
     }
    }
    推荐文章