今回は、データを纏めて扱うことができる「配列」について学んでいきましょう。
配列とは
今までデータを格納する時に使ってきた「変数」ですが、1つの変数に格納できるデータは1つだけでした。
例えば、3人分の名前を変数に格納して出力するには下記のようなプログラムになります。
fun main(args : Array<String>){
val name1 = “鈴木”
val name2 = “佐藤”
val name3 = “田中”
println(name1)
println(name2)
println(name3)
}
———————————————————————————————-
実行結果
鈴木
佐藤
田中
今回は3人分なので、3人分の名前を格納する変数を宣言し、それぞれに値を代入しました。でも、もしこれが100人分となった場合、100人分の変数を作るのってとっても大変ですよね。
そんな時に便利なのが「配列」です。配列を使うと、1つの変数に複数の値を格納することができるのです。
値を格納した配列を作る場合は、arrayOf()の中に、格納したい値をカンマで区切って記述します。配列に格納したそれぞれの値を要素と呼びます。
arrayOf( 値1, 値2, 値3 ・・・)
配列を使うと複数の値を纏めて1つの変数に代入できますが、配列に格納された値にはインデックス(添え字)と呼ばれる順番が割り振られ、それぞれの値をきちんと区別できるようになっています。インデックスは0から始まります。
配列に格納されている値を参照するときは下記のように記述します。
配列変数名[インデックス]
配列の場合は変数が1つなので、それぞれの要素を区別するには「変数名とインデックス」の指定が必要なので注意してください。
先程のプログラムを配列を使って書き換えると下記のようになります。
3名分の名前を格納した配列を変数nameに代入し、その後、配列変数名nameのインデックスを指定して値を出力しています。
fun main(args : Array<String>){
val name = arrayOf(“鈴木”, “佐藤”, “田中” )
println(name[0])
println(name[1])
println(name[2])
}
———————————————————————————————-
実行結果
鈴木
佐藤
田中
値を格納した順番にインデックスが割り振られ、0番目に”鈴木”、 1番目に”佐藤”、 2番目に”田中” が格納されています。
配列に格納された値は、変数と同じように、値を書き換えることもできます。
fun main(args : Array<String>){
val name = arrayOf(“鈴木”, “佐藤”, “田中” )
name[1] = “石川” // インデックス1番目の”佐藤” を”石川”に書き換え
println(name[0])
println(name[1])
println(name[2])
}
———————————————————————————————-
実行結果
鈴木
石川
田中
存在しないインデックスを参照した場合はエラーになります。
fun main(args : Array<String>){
val name = arrayOf(“鈴木”, “佐藤”, “田中” )
name[3] = “石川” // 3番目のインデックスは存在しないためエラー
println(name[0])
println(name[1])
println(name[2])
println(name[3])
}
お気づきの人もいるかと思いますが、先程のサンプルコードの配列変数の宣言をよーく見ると、varではなくvalで宣言しています。なのに、なぜ値の書き換えができるのか疑問に思いませんでしたか?
実は、配列に格納されている値を変更できるか否かは、変数名のval、varではなく、別のルールがあります。
arrayOf()で作成した配列は値の入れ換えができますが、値の入れ換えができない配列を作成する場合は、listOf()を使います。
listOf( 値1, 値2, 値3 ・・・)
先程のプログラムを、listOf()を使って書き換えるとエラーになります。
fun main(args : Array<String>){
val name = listOf(“鈴木”, “佐藤”, “田中” )
name[1] = “石川” // 書き換えできないのでエラー
println(name[0])
println(name[1])
println(name[2])
}
配列の要素数
配列の要素数とは、配列に格納されている値の数を指します。要素数を取得するには以下のように記述します。
配列変数名.count()
先程作成した配列は値を3つ格納しているので要素数は3ということになります。
fun main(args : Array<String>){
val name = arrayOf(“鈴木”, “佐藤”, “田中” )
println(name.count())
}
———————————————————————————————-
実行結果
3
arrayOf()またはlistOf()で作成した配列は、後から要素を追加したり削除することが出来ません。一度作成したらその要素数で固定になります。
要素の追加
後から要素を追加、削除したい場合は、arrayListOf()を使います。
arrayListOf( 値1, 値2, 値3 ・・・)
arrayListOf()を使って作成した配列は、以下の記述で要素を追加できます。
配列変数名.add(追加する値); // 配列の一番最後に追加
配列変数名.add(インデックス, 追加する値); // 指定した場所に追加
add()で追加した値は配列の要素の一番最後に追加されます。
fun main(args : Array<String>){
val name = arrayListOf(“鈴木”, “佐藤”, “田中” )
name.add(“石川”) // 最後に追加
println(name[0])
println(name[1])
println(name[2])
println(name[3])
println(name.count())
}
———————————————————————————————-
実行結果
鈴木
佐藤
田中
石川
4
add(インデックス, 値)で追加した値は指定した場所に追加されます。指定した場所に追加すると、そこから後ろの要素のインデックスが後ろにずれるので注意してください。
fun main(args : Array<String>){
val name = arrayListOf(“鈴木”, “佐藤”, “田中” )
name.add(1, “石川”) // インデックス1番目の場所に追加
println(name[0])
println(name[1])
println(name[2])
println(name[3])
}
———————————————————————————————-
実行結果
鈴木
石川
佐藤
田中
要素の削除
要素を削除する場合は以下のように記述します。要素を削除すると、追加の時と同様にインデックスがずれるので、前詰めになります。
配列変数名.removeAt(インデックス); // 指定した場所を削除
配列変数名.remove(値); // 指定した値を削除
要素数3の配列から要素を削除したので、要素数2の配列となります。
fun main(args : Array<String>){
val name = arrayListOf(“鈴木”, “佐藤”, “田中” )
name.removeAt(1) // インデックス1の要素を削除
println(name[0])
println(name[1])
println(name.count())
}
———————————————————————————————-
実行結果
鈴木
田中
2
インデックスではなく要素の値を指定して削除することもできます。
fun main(args : Array<String>){
val name = arrayListOf(“鈴木”, “佐藤”, “田中” )
name.remove(“佐藤”) // “佐藤”が格納されている要素を削除
println(name[0])
println(name[1])
println(name.count())
}
———————————————————————————————-
実行結果
鈴木
田中
2
次回は、条件に応じて処理を分岐したり繰り返しをするための文法「制御構文」について学んでいきたいと思います。