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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。