Elixir语言中 Range
相关用法介绍如下。
范围表示零、一个或多个升序或降序整数的序列,具有称为步长的共同差异。
范围始终包含在内,并且可能具有自定义步骤。在范围上创建和匹配的最常见形式是通过
和 first..last
符号,auto-imported 来自 first..last//step
:Kernel
iex> Enum.to_list(1..3)
[1, 2, 3]
iex> Enum.to_list(1..3//2)
[1, 3]
iex> Enum.to_list(3..1//-1)
[3, 2, 1]
范围也可以有一个元素:
iex> Enum.to_list(1..1)
[1]
iex> Enum.to_list(1..1//2)
[1]
甚至根本没有元素:
iex> Enum.to_list(10..0//1)
[]
iex> Enum.to_list(0..10//-1)
[]
当定义一个没有步长的范围时,步长将根据范围的第一个和最后一个位置来定义,如果是first >= last
,它将是一个递增的范围,步长为1。否则,它是一个递减的范围。但请注意,不推荐使用隐式递减范围。因此,如果您需要从 3
到 1
的递减范围,最好改为编写 3..1//-1
。
定义
递增范围 first..last//step
是从 first
到 last
增加 step
的范围,其中 step
必须是正整数,所有值 v
必须是 first <= v and v <= last
。因此,范围 10..0//1
是一个空范围,因为没有值 v
是 10 <= v and v <= 0
。
同样,递减范围 first..last//step
是从 first
到 last
递减 step
的范围,其中 step
必须是负整数,而值 v
必须是 first >= v and v >= last
。因此,范围 0..10//-1
是一个空范围,因为没有值 v
是 0 >= v and v >= 10
。
表示
在内部,范围表示为结构:
iex> range = 1..9//2
1..9//2
iex> first..last//step = range
iex> first
1
iex> last
9
iex> step
2
iex> range.step
2
您可以直接访问范围字段(first
、last
和 step
),但不应手动修改或创建范围。而是使用正确的运算符或
和 new/2
。new/3
范围实现了
协议,这意味着Enumerable
模块中的函数可用于处理范围:Enum
iex> range = 1..10
1..10
iex> Enum.reduce(range, 0, fn i, acc -> i * i + acc end)
385
iex> Enum.count(range)
10
iex> Enum.member?(range, 11)
false
iex> Enum.member?(range, 8)
true
无论范围大小如何,此类函数调用在内存方面都是有效的。
协议的实现使用仅基于端点的逻辑,并没有具体化整个整数列表。Enumerable
相关用法
- Elixir Range.size用法及代码示例
- Elixir Range.new用法及代码示例
- Elixir Range.disjoint?用法及代码示例
- Elixir Registry.count_match用法及代码示例
- Elixir Registry.lookup用法及代码示例
- Elixir Record.extract用法及代码示例
- Elixir Registry.unregister_match用法及代码示例
- Elixir Regex.run用法及代码示例
- Elixir Regex.names用法及代码示例
- Elixir Record.defrecord用法及代码示例
- Elixir Registry.register用法及代码示例
- Elixir Registry用法及代码示例
- Elixir Registry.values用法及代码示例
- Elixir Registry.put_meta用法及代码示例
- Elixir Regex.named_captures用法及代码示例
- Elixir Registry.keys用法及代码示例
- Elixir Regex.match?用法及代码示例
- Elixir Record用法及代码示例
- Elixir Registry.start_link用法及代码示例
- Elixir Registry.unregister用法及代码示例
- Elixir Registry.delete_meta用法及代码示例
- Elixir Registry.count用法及代码示例
- Elixir Registry.meta用法及代码示例
- Elixir Registry.select用法及代码示例
- Elixir Registry.update_value用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Range。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。