當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir Range用法及代碼示例


Elixir語言中 Range 相關用法介紹如下。

範圍表示零、一個或多個升序或降序整數的序列,具有稱為步長的共同差異。

範圍始終包含在內,並且可能具有自定義步驟。在範圍上創建和匹配的最常見形式是通過 first..last first..last//step 符號,auto-imported 來自 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。否則,它是一個遞減的範圍。但請注意,不推薦使用隱式遞減範圍。因此,如果您需要從 31 的遞減範圍,最好改為編寫 3..1//-1

定義

遞增範圍 first..last//step 是從 firstlast 增加 step 的範圍,其中 step 必須是正整數,所有值 v 必須是 first <= v and v <= last 。因此,範圍 10..0//1 是一個空範圍,因為沒有值 v10 <= v and v <= 0

同樣,遞減範圍 first..last//step 是從 firstlast 遞減 step 的範圍,其中 step 必須是負整數,而值 v 必須是 first >= v and v >= last 。因此,範圍 0..10//-1 是一個空範圍,因為沒有值 v0 >= 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

您可以直接訪問範圍字段(firstlaststep),但不應手動修改或創建範圍。而是使用正確的運算符或 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-lang.org大神的英文原創作品 Range。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。