轨道
/
Elm
Elm
/
练习
/
见习魔术师
见习魔术师

见习魔术师

学习练习

简介

数组

在 Elm 中,Array是一种快速的不可变集合,可以包含零个或多个同类型的值。

List 是默认导入的,Array 则不同:Array 模块必须显式导入,可以使用 import Array 或类似写法。

数组可以这样定义:

import Array exposing (Array)

empty : Array Char
empty = Array.empty

singleValue = Array.fromList [ 5 ] --> Array Int

repeatSingleValue = Array.repeat 2 5 --> Array.fromList [ 5, 5 ]

initialiseFromIndex = Array.initialise 3 (\index -> index * 2) --> Array.fromList [ 0, 2, 4 ]

initialisefromList = Array.fromList [ "a", "b", "c" ] --> Array.fromList [ "a", "b", "c" ]

使用 Array.push 可以向数组中添加元素:

twoToFour = Array.fromList [ 2, 3, 4 ]
oneToFour = Array.push 1 twoToFour --> Array.fromList [ 1, 2, 3, 4 ]

使用 Array.get 可以取出数组中的元素:

sixSeven = Array.fromList [ 6, 7 ]
Array.get 0 sixSeven --> Just 6

使用 Array.set 可以修改数组中的元素:

sixSeven = Array.fromList [ 6, 7 ]
Array.set 1 8 sixSeven --> Array.fromList [ 6, 8 ]

数组的操作用 Array 模块中定义的函数完成。

oneTwo = Array.fromList [ 1, 2 ]
Array.length oneTwo --> 2

说明

作为准魔术师,Elyse 需要练一些基本功。她有一副牌,想要对它做各种操作。

为了简单一点,她只用 1 到 10 这十张牌。

1. 从牌堆中取出一张牌

实现getCard函数,返回给定牌堆中位置为index的那张牌。如果这个下标不在牌堆中,就返回 Nothing。

getCard 2 ( Array.fromList [ 1, 2, 4, 1 ] )
    --> Just 4
getCard 6 ( Array.fromList [ 1, 2, 4, 1 ] )
    --> Nothing

2. 修改牌堆中的一张牌

实现setCard函数,它返回一个牌堆,其中位置为index的那张牌被替换为传入的新牌。 如果index不在牌堆中,就返回原来的牌堆。

setCard 2 6 ( Array.fromList [ 1, 2, 4, 1 ] )
    --> Array.fromList [ 1, 2, 6, 1 ]
setCard 6 6 ( Array.fromList [ 1, 2, 4, 1 ] )
    --> Array.fromList [ 1, 2, 4, 1 ]

3. 向牌堆中添加一张牌

实现addCard函数,返回加入了这张新牌的牌堆。

addCard 8 ( Array.fromList [ 5, 9, 7, 1 ] )
    --> Array.fromList [ 5, 9, 7, 1, 8 ]

4. 从牌堆中移除一张牌

实现removeCard函数,返回一个移除了位置为index的那张牌之后的牌堆。 如果给定的index不是牌堆中的有效下标,就返回原来的牌堆。

removeCard 2 ( Array.fromList [ 3, 2, 6, 4, 8 ] )
    --> Array.fromList [ 3, 2, 4, 8 ]
removeCard 2 ( Array.fromList [ 3, 2 ] )
    --> Array.fromList [ 3, 2 ]

5. 统计牌堆中偶数牌的数量

实现evenCardCount函数,统计牌堆中偶数牌的数量。

evenCardCount (Array.fromList [ 3, 8, 4, 5, 1, 6, 10 ] )
    --> 4
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Elm Exercism

准备好开始 见习魔术师 了吗?

注册 Exercism,借助 28 个概念110 个练习 和真人导师指导,学习并掌握 Elm,全部免费。