配列(リスト)からインデックスで要素を参照するには (get)

配列(リスト)の要素をインデックスで指定子て参照する方法。

多くの言語では先頭が0から始まるインデックスで要素を参照する。

Go言語 arr[index]
Javaの配列 arr[index]
JavaのList lst.get(index)
Scala lst(index)
PHP $arr[$index]
Python lst[index]
Ruby arr[index]
Perl $arr[$index]

Go言語 (golang)

配列(Array)

配列の要素は [] でアクセスする。

インデックスは0から始まる。

arr[index]

インデックスに負を使ってもRubyやPythonなどと違って後ろから数えてくれるようなことはない。

スライス(Slice)

スライスの要素は [] でアクセスする。

インデックスは0から始まる。

sl[index]

インデックスに負を使ってもRubyやPythonなどと違って後ろから数えてくれるようなことはない。

Java

配列

配列の要素は [] でアクセスする。

インデックスは0から始まる。

arr[index]

java.util.List

java.util.Listget というメソッドで要素にアクセスする。

lst.get(index)

Signature:

E java.util.List<E>#get(int index)

java.util.List#get | Java Platform SE 8 Javadoc
http://docs.oracle.com/javase/8/docs/api/java/util/List.html#get-int-

Scala

Array でも List などの Seq でも同じで、関数呼び出しのように () でアクセスする。 Javaでは [] でアクセスする配列もScalaでは () でアクセスする。

arr(index)
lst(index)

apply というメソッドがあるオブジェクトは、それ自体が関数であるかのように後ろにカッコで引数を置くことで、applyメソッドを呼び出すことができるScalaのシンタックスシュガーがあり、 ArrayList などには apply メソッドが定義されているのでこのように書ける。

つまり、これらは以下と同じ意味。

arr.apply(index)
lst.apply(index)

Signature:

PHP

配列の要素は [] でアクセスする。

$arr[$index]

インデックスに負を使ってもRubyやPythonなどと違って後ろから数えてくれるようなことはない。

-> 範囲外のインデックスにアクセスしたときにどうなるか?

PHP 5.4まで(5.4を含む)は配列のリテラルに直接 [] でアクセスすることができない。

echo [10, 20, 30][1];

このコードをPHP 5.4以前で実行すると PHP Parse error: syntax error, unexpected '[' というエラーになる。 5.5からはこれで 20 が出力される。

Python

要素には [] でアクセスする。 Pythonのシーケンスといわれるリスト、タプル、文字列で共通するアクセス方法である。

lst[index]
tpl[index]

インデックスに負を使うと後ろから数えてくれる。

lst[-1]; # 最後の要素
lst[-2]; # 最後から2番目の要素

関連

Ruby / JRuby

配列の要素には [] でアクセスする。

インデックスは0から始まる。

arr[index]

Array#atメソッドでも同じ。

arr.at(index)

インデックスに負を使うと後ろから数えてくれる。

arr[-1] # 最後の要素
arr[-2] # 最後から2番目の要素

Array#[]Array#at ではインデックスが最後よりも後ろになったり、負のインデックスが先頭よりも前になってしまうと、 nil になる。

Array#fetch というのもあり、これはインデックスが最後よりも後ろになったり、負のインデックスが先頭よりも前になってしまう場合の動作を2番目の引数またはブロックで指定することができる。

-> 範囲外のインデックスにアクセスしたときにどうなるか?

Array#[] は部分配列の取得にも使えるが、Array#at は使えない。

-> 部分配列の取得

Array#[], Array#at | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/=5b=5d.html

Array#fetch | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/fetch.html

Perl

配列そのもののシジルは @ だが、インデックスで参照するには、要素がスカラのためシジル(sigil)として $ を使い、[] でアクセスする。

インデックスは0から始まる。

$arr[0];

インデックスに負を使うと後ろから数えてくれる。

$arr[-1]; # 最後の要素
$arr[-2]; # 最後から2番目の要素

インデックスが最後よりも後ろになったり、負のインデックスが先頭よりも前になってしまうと、 undef になり、use warnings; を使っていると警告が表示される。
-> 範囲外のインデックスにアクセスしたときにどうなるか?

配列へのレファレンスから要素を取り出すには ->[] を使う。

my $arr = ['a', 'b', 'c'];

$arr->[0] # => 'a'

以下の例のように入れ子になった配列のレファレンスも ->[] を繰り返すことでアクセスできる。

my $a = ['a', 'b', ['c', 'd', 'e']];

print $a->[2]->[0];
# => c

なぜだか ->[][] でもアクセスできる。

my $a = ['a', 'b', ['c', 'd', 'e']];

print $a->[2][0];
# => c

インデックスを1から始めることもできるらしい。

perl - 配列を1番目からはじめてみる
http://blog.livedoor.jp/dankogai/archives/51055632.html

関連

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク