1. 概要

このチュートリアルでは、ScalaのインデックスによってListのアイテムにアクセスするさまざまな方法について説明します。

2. インデックスに基づくアイテムの取得

クラスListは、インデックスに基づいてその要素にアクセスするためのさまざまなメソッドを提供します。 これらの方法を1つずつ調べてみましょう。

2.1. List.apply()

整数のリストを定義しましょう。

val numbers = List.range(1, 10); // List(1, 2, 3, 4, 5, 6, 7, 8, 9)

apply()メソッドは、提供されたインデックスに基づいてListアイテムを取得します。

assert(numbers.apply(5) == 6)

ここで、6は番号のインデックス5に存在します。

ただし、提供されたインデックスが範囲外の場合は、IndexOutOfBoundsExceptionがスローされることに注意する必要があります。

2.2. List.lift()

メソッドlift()は、Option型の値を返すため、「null認識」の結果を提供します。クラス Option には、Someという2つの型のインスタンスがあります。およびなし

これは、アイテムが指定されたインデックスに存在する場合、オプションタイプSomeを取得することを意味します。 それ以外の場合は、オプションタイプを取得しますなし

var option = numbers.lift(1) // returns Some

assert(option.isDefined)
assert(option.get == 2)

option = numbers.lift(10) // returns None
assert(option.isEmpty)

ここで、インデックスを1としてlift()に渡すと、値2を含む OptionalタイプSomeが返されます。 一方、インデックス10には要素がありません。 したがって、 Option alタイプNone、は空になります。

その後、返された Optional値に対してさまざまな機能操作を実行できます。

ただし、タイプ Noneのインスタンスでget()メソッドを呼び出すと、NoSuchElementException。がスローされることを覚えておく必要があります。

2.3. リスト(インデックス)

Scalaには、1つ以上の値を囲む括弧を変数に適用するための一般的なルールがあります。 ルールは、Scalaが括弧をその変数の apply()メソッドの呼び出しに変換するようなものです。

例を見てみましょう:

assert(numbers(8) == 9)

上記のコードでは、Scalaは内部でnumbers(8)をnumbers.apply(8)に変換します。 したがって、インデックス8に存在する値9を取得します。 数字

したがって、これら2つのステートメントは実際には同等です。

scala> println(numbers(8))
9
scala> println(numbers.apply(8))
9

ただし、クラス Listが実際にメソッドapply()を定義しているため、変換が行われることに注意する必要があります。

最後に、 apply()と同様に、この場合も、範囲を超えて要素にアクセスすると、IndexOutOfBoundsExceptionがスローされます。

3. List.head()および List.last()

クラスListhead()メソッドと last()メソッドを使用して、それぞれ最初と最後の要素を取得できます。

メソッドhead()は、リストの最初の項目を返します。

assert(numbers.head == 1)

同様に、メソッド last()を使用して、リストの最後のアイテムを取得できます。

assert(numbers.last == 9)

ここで、1と9は、リストの最初と最後の項目です。

4. 結論

この記事では、Scalaでインデックス別にリストアイテムを取得するためのさまざまな方法について説明しました。

いつものように、例の完全なソースコードは、GitHubにあります。