我想生成一个整数列表.我有起始值,增量值和列表的长度.
我知道这应该很简单,但我不能破解它.我尝试过列表推导,流函数等.
这是我尝试过的,什么不起作用:
范围允许我选择开始和结束,但不允许选择增量
1..3 |> Enum.to_list()
Run Code Online (Sandbox Code Playgroud)
这个列表理解有效,但它是"最好的"方式吗?
start = 1
length = 3
increment = 2
for i <- 0..length-1, do: start + i*increment
Run Code Online (Sandbox Code Playgroud)
你可以通过理解来做到这一点:
for x <- 1..10, do: x * 3
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,以下是您指定的值:
start = 1
length = 10
increment = 3
Run Code Online (Sandbox Code Playgroud)
负范围需要额外的括号:
for x <- -1..(-10), do: x * 3
[-3, -6, -9, -12, -15, -18, -21, -24, -27, -30]
Run Code Online (Sandbox Code Playgroud)
Gazler的答案很棒.
如果你想更加喜欢,你可以使用Stream.iterate/2并Enum.take/2获得类似的结果:
start = 1
length = 10
increment = 3
Stream.iterate(start, &(&1 + increment)) |> Enum.take(length)
#=> [1, 4, 7, 10, 13, 16, 19, 22, 25, 28]
Run Code Online (Sandbox Code Playgroud)