📅  最后修改于: 2020-11-04 09:00:07             🧑  作者: Mango
列表,元组和记录数据结构可用于存储值的集合。
本章讨论如何在Elm中使用List。
列表是齐次值的集合。列表中的值必须全部具有相同的数据类型。
使用变量存储值时,请考虑以下限制-
List_name = [value1,value2,value3.....valuen]
以下示例显示了如何在Elm中使用列表。在榆树REPL中尝试这个例子-
> myList1 = [10,20,30]
[10,20,30] : List number
> myList2 = ["hello","world"]
["hello","world"] : List String
如果我们尝试将不同类型的值添加到列表中,则编译器将引发类型不匹配错误。如下所示。
> myList = [1,"hello"]
-- TYPE MISMATCH
---------------------------------------------
repl-temp-000.elm
The 1st and 2nd entries in this list are different types of values.
4| [1,"hello"]
^^^^^^^
The 1st entry has this type:
number
But the 2nd is:
String
下表显示了List上的常见操作-
Sr. No | Method | Description |
---|---|---|
1 | isEmpty : List a -> Bool | checks if list is empty |
2 | reverse : List a -> Bool | reverses input list |
3 | length : List a -> Int | returns size of the list |
4 | maximum : List comparable -> Maybe.Maybe comparable | returns maximum value |
5 | minimum : List comparable -> Maybe.Maybe comparable | returns minimum value |
6 | sum : List number -> number | returns sum of all elements in list |
7 | product : List number -> number | checks if list is empty |
8 | sort : List comparable -> List comparable | sorts list in ascending order |
9 | concat : List (List a) -> List a | merges a bunch of list into one |
10 | append : List a -> List a -> List a | merges two lists together |
11 | range : Int -> Int -> List Int | returns a list of numbers from start to end |
12 | filter : (a -> Bool) -> List a -> List a | filters list of values from input list |
13 | head : List a -> Maybe.Maybe a | returns the first element from list |
14 | tail : : List a -> Maybe.Maybe (List a) | returns all elements except the head |
如果列表为空,则此函数返回true。
List.isEmpty list_name
要检查函数的签名,请在elm REPL中键入以下内容:
> List.isEmpty
: List a -> Bool
> List.isEmpty
: List a -> Bool
> List.isEmpty [10,20,30]
False : Bool
此函数反转列表。
List.reverse list_name
要检查函数的签名,请在elm REPL中键入以下内容:
> List.reverse
: List a -> List a
> List.reverse [10,20,30]
[30,20,10] : List number
此函数返回列表的长度。
List.length list_name
要检查函数的签名,请在elm REPL中键入以下内容:
> List.length
: List a -> Int
> List.length [10,20,30]
3 : Int
此函数返回非空列表中的最大元素。
List.maximum list_name
要检查函数的签名,请在elm REPL中键入以下内容:
> List.maximum
: List comparable -> Maybe.Maybe comparable
> List.maximum [10,20,30]
Just 30 : Maybe.Maybe number
> List.maximum []
Nothing : Maybe.Maybe comparable
此函数返回非空列表中的最小元素。
List.minimum list_name
要检查函数的签名,请在elm REPL中键入以下内容:
> List.minimum
: List comparable -> Maybe.Maybe comparable
> List.minimum [10,20,30]
Just 10 : Maybe.Maybe number
此函数返回列表中所有元素的总和。
List.sum list_name
要检查函数的签名,请在elm REPL中键入以下内容:
> List.sum
: List number -> number
> List.sum [10,20,30]
60 : number
此函数返回列表中所有元素的乘积。
List.product list_name
要检查函数的签名,请在elm REPL中键入以下内容:
: List number -> number
List.product [10,20,30]
6000 : number
此函数将列表中的值从最低到最高排序。
List.sort list_name
要检查函数的签名,请在elm REPL中键入以下内容:
> List.sort
: List comparable -> List comparable
> List.sort [10,20,30]
[10,20,30] : List number
此函数将一堆列表连接成一个列表。
List.concat [ [list_name1],[list_name2],[list_name3],.....[list_nameN] ]
要检查函数的签名,请在elm REPL中键入以下内容:
> List.concat
: List (List a) -> List a
> List.concat [[10,20], [30,40],[50,60]]
[10,20,30,40,50,60] : List number
此函数将两个列表放在一起。
List.append [list_name1] [list_name2]
要检查函数的签名,请在elm REPL中键入以下内容:
> List.append
: List a -> List a -> List a
> List.append [10,20] [30,40]
[10,20,30,40] : List number
++运算符还可用于将列表追加到另一个列表。这在下面的示例中显示-
> [10.1,20.2] ++ [30.3,40.4]
[10.1,20.2,30.3,40.4] : List Float
此函数创建一个数字列表,每个元素加一。应该将列表中的最低和最高数字传递给该函数。
List.range start_range end_range
要检查函数的签名,请在elm REPL中键入以下内容:
> List.range
: Int -> Int -> List Int
> List.range 1 10
[1,2,3,4,5,6,7,8,9,10] : List Int
此函数从输入列表中过滤一组值。仅保留通过测试的值。
List.filter test_function input_list
要检查函数的签名,请在elm REPL中键入以下内容:
> List.filter
: (a -> Bool) -> List a -> List a
以下示例过滤输入列表中的所有偶数
> List.filter (\n -> n%2==0) [10,20,30,55]
[10,20,30] : List Int
此函数返回输入列表中的第一个元素。
List.head input_list
要检查函数的签名,请在elm REPL中键入以下内容:
> List.head
: List a -> Maybe.Maybe a
> List.head [10,20,30,40]
Just 10 : Maybe.Maybe number
> List.head []
Nothing : Maybe.Maybe a
此函数返回列表中第一位之后的所有元素。
List.tail input_list
要检查函数的签名,请在elm REPL中键入以下内容:
> List.tail
: List a -> Maybe.Maybe (List a)
> List.tail [10,20,30,40,50]
Just [20,30,40,50] : Maybe.Maybe (List number)
> List.tail [10]
Just [] : Maybe.Maybe (List number)
> List.tail []
Nothing : Maybe.Maybe (List a)
cons运算符(::)将元素添加到列表的前面。
> 10::[20,30,40,50]
[10,20,30,40,50] : List number
要添加的新元素和列表中值的数据类型必须匹配。如果数据类型不匹配,则编译器将引发错误。
> [1,2,3,4]::[5,6,7,8]
-- TYPE MISMATCH ---------------------------------
------------ repl-temp-000.elm
The right side of (::) is causing a type mismatch.
3| [1,2,3,4]::[5,6,7,8]
^^^^^^^^^
(::) is expecting the right side to be a:
List (List number)
But the right side is:
List number
Hint: With operators like (::) I always check the left side first. If it seems fine,
I assume it is correct and check the right side. So the
problem may be in how the left and right arguments interact.
让我们检查清单在Elm中是否是不变的。第一个列表myList与值1串联时,将创建一个新列表,并返回给myListCopy 。因此,如果我们显示初始列表,则其值将不会更改。
> myList = [10,20,30]
[10,20,30] : List number
> myListCopy = 1::myList
[1,10,20,30] : List number
> myList
[10,20,30] : List number
>myList == myListCopy
False : Bool