首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Elixir中获得范围的尾部

如何在Elixir中获得范围的尾部
EN

Stack Overflow用户
提问于 2016-12-02 22:57:41
回答 4查看 2K关注 0票数 4

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

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

这是我尝试过的:

代码语言:javascript
复制
iex(1)> [h|t] = [1..3]
[1..3]
iex(2)> h
1..3
iex(3)> t
[]

正如您所看到的,它没有完成我所期望的事情。我期望的是h = 1t = [2,3]

如何使头部和尾部脱离范围?这有可能吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-12-02 23:04:15

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

代码语言:javascript
复制
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个整数键)。列表将占用与列表中的项数成比例的空间。根据您正在做的事情,可能有一种比将范围转换为列表更好的方法。

票数 6
EN

Stack Overflow用户

发布于 2017-03-23 18:59:51

这应该能更好地工作

代码语言:javascript
复制
iex(42)> range = 1..100     
1..100
iex(43)> _..last = range    
1..100
iex(44)> last
100
票数 6
EN

Stack Overflow用户

发布于 2017-02-22 22:37:48

您可以通过索引来获取范围的最后一项

代码语言:javascript
复制
iex(1)> range = 1..3                      
1..3
iex(2)> last_index = Enum.count(range) - 1
2
iex(3)> Enum.at(range, last_index)        
3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40935088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档