# range

URL: https://caijiao.org/radash/array/range
Source: docs/radash/array/range.md
Description: 创建用于迭代的范围 给定起始值、结束值、值和步长，返回一个生成器，该生成器将按步长生成从起始值到结束值的值

创建用于迭代的范围


## 基本用法

给定起始值、结束值、值和步长，返回一个生成器，该生成器将按步长生成从起始值到结束值的值。适用于用 `for of` 替换 `for (let i = 0)`。Range 将返回一个生成器，`for of` 将一次调用一个，因此创建大型范围是安全的。

接口与 `list` 相同。

_向 Python 的 `range` 功能致敬_

```ts
import { range } from 'radash'

range(3)                  // 生成 0, 1, 2, 3
range(0, 3)               // 生成 0, 1, 2, 3
range(0, 3, 'y')          // 生成 y, y, y, y
range(0, 3, () => 'y')    // 生成 y, y, y, y
range(0, 3, i => i)       // 生成 0, 1, 2, 3
range(0, 3, i => `y${i}`) // 生成 y0, y1, y2, y3
range(0, 3, obj)          // 生成 obj, obj, obj, obj
range(0, 6, i => i, 2)    // 生成 0, 2, 4, 6

for (const i of range(0, 200, 10)) {
  console.log(i) // => 0, 10, 20, 30 ... 190, 200
}

for (const i of range(0, 5)) {
  console.log(i) // => 0, 1, 2, 3, 4, 5
}
```

## 函数签名

range 函数可以通过不同的参数做很多事情。

### range(size)

当给出单个参数时，它被视为 `size`。返回一个生成器，该生成器产生从 0 到 `size` 的值。

```ts
range(3) // 生成 0, 1, 2, 3
```

### range(start, end)

当给出两个参数时，它们被视为 `start` 和 `end`。返回一个生成器，该生成器产生从 `start` 到 `end` 的值

```ts
range(2, 6) // 生成 2, 3, 4, 5, 6
```

### range(start, end, value)

当给出第三个参数时，它被视为生成器中产生的 `value`。如果 `value` 是一个函数，它将被调用（带有索引参数）来创建每个值。

```ts
range(2, 4, {})       // 生成 {}, {}, {}
range(2, 4, null)     // 生成 null, null, null
range(2, 4, (i) => i) // 生成 2, 3, 4
```

### range(start, end, value, step)

当给出第四个参数时，它被视为从 `start` 到 `end` 产生值时跳过的 `step` 大小。

```ts
range(2, 4, i => i, 2)      // 生成 2, 4
range(25, 100, i => i, 25)  // 生成 25, 50, 75, 100
```
