【问题标题】:How to make list of integers with a start, length and increment in Elixir?如何在 Elixir 中制作具有开始、长度和增量的整数列表?
【发布时间】:2016-01-22 00:37:47
【问题描述】:

我想生成一个整数列表。我有列表的起始值、增量值和长度。

我知道这应该很简单,但我无法破解它。我尝试过列表推导、流函数等。

以下是我尝试过的和无效的:

范围允许我选择开始和结束,但不能选择增量

1..3 |> Enum.to_list()

此列表理解有效,但它是“最佳”方式吗?

start = 1
length = 3
increment = 2
for i <- 0..length-1, do: start + i*increment

【问题讨论】:

  • 给反对者,请告诉我如何改进这个问题。我已经搜索过这个,但找不到它。如果简单,请分享!

标签: elixir


【解决方案1】:

你可以通过理解来做到这一点:

for x <- 1..10, do: x * 3
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

在上面的示例中,以下是您指定的值:

start = 1
length = 10
increment = 3

负范围需要额外的括号:

for x <- -1..(-10), do: x * 3 
[-3, -6, -9, -12, -15, -18, -21, -24, -27, -30]

【讨论】:

  • 感谢 Gazler,我一直坚持尝试仅将 + 与累加器值一起使用
【解决方案2】:

Gazler 的回答非常棒。

如果您想更花哨一点,可以使用 Stream.iterate/2Enum.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]

【讨论】:

  • 啊哈!这就是我最初想要做的。我无法弄清楚 lambda。谢谢!
  • 这种方法的优点是Streamlazy:当您目前不知道length 的值时很有用。
【解决方案3】:

您也可以使用:lists.seq(From, To, Increment)

:lists.seq(start, length*increment, increment)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2018-03-19
    • 2020-10-30
    • 1970-01-01
    • 2020-04-01
    • 2017-07-02
    相关资源
    最近更新 更多