gpt4 book ai didi

pattern-matching - 如何在 Elixir 中获取范围的尾部

转载 作者:行者123 更新时间:2023-12-01 08:51:24 25 4
gpt4 key购买 nike

这可能是一个微不足道的问题,但我无法理解。

我只想在一个范围内进行模式匹配,得到头部和尾部。

这是我尝试过的:

iex(1)> [h|t] = [1..3]
[1..3]
iex(2)> h
1..3
iex(3)> t
[]

如您所见,它没有按照我的预期进行。我的期望是 h = 1t = [2,3]

如何让头部和尾部超出范围?这甚至可能吗?

最佳答案

首先,[1..3] 是一个包含 1 个范围的列表,而不是一个范围。其次,范围本身不是列表,它只是一个包含 2 个值的结构:第一个值和最后一个值 ( Map.from_struct(1..10) #=> %{first: 1, last: 10} )。如果要将范围的头部和尾部作为列表,则需要先将范围转换为列表:

iex(1)> range = 1..3
1..3
iex(2)> list = Enum.to_list(range)
[1, 2, 3]
iex(3)> [h | t] = list
[1, 2, 3]
iex(4)> h
1
iex(5)> t
[2, 3]

请注意,这取决于您在做什么,效率非常低。一个范围占用很少的内存(一个 Struct + 2 个整数键)。列表将占用与列表中项目数成比例的空间。根据您在做什么,可能有比将范围转换为列表更好的方法。

关于pattern-matching - 如何在 Elixir 中获取范围的尾部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40935088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com