3.15. Working with a List in a Match Expression
Problem
You know that a List
data
structure is a little different than other collection data structures.
It’s built from cons cells and ends in a Nil
element. You want to use this to your
advantage when working with a match expression, such as when writing a
recursive function.
Solution
You can create a List
like
this:
val
x
=
List
(
1
,
2
,
3
)
or like this, using cons cells and a Nil
element:
val
y
=
1
::
2
::
3
::
Nil
When writing a recursive algorithm, you can take advantage of the
fact that the last element in a List
is a Nil
object. For instance, in the
following listToString
method, if the
current element is not Nil
, the
method is called recursively with the remainder of the List
, but if the current element is Nil
, the recursive calls are stopped and an
empty String
is returned, at which
point the recursive calls unwind:
def
listToString
(
list
:
List
[
String
])
:
String
=
list
match
{
case
s
::
rest
=>
s
+
" "
+
listToString
(
rest
)
case
Nil
=>
""
}
Running this example in the REPL yields the following result:
scala>val fruits = "Apples" :: "Bananas" :: "Oranges" :: Nil
fruits: List[java.lang.String] = List(Apples, Bananas, Oranges) scala>listToString(fruits)
res0: String = "Apples Bananas Oranges "
The same approach of (a) handling the Nil
condition and (b) handling the remainder
of the List
can be used when dealing with a List
of other types:
def
sum
(
list
:
List
[
Int
])
:
Int
=
list
match
{
case
Nil
=>
1
case
n
::
rest
=>
n
+
sum
(
rest
)
}
def
multiply ...
Get Scala Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.