Kotlin配列(Array)の宣言、初期化、主な関数
配列(Array)
arrayOf()で配列を作成する。配列の要素数は固定だが、性能に優れている。
fun main() {
val nums = arrayOf(1, 2, 3)
val cols = arrayOf("Red", "Green", "Blue")
for (n in nums) { println(n) }
for (c in cols) { println(c) }
}
Output:
1
2
3
Red
Green
Blue
次のように変数宣言時にArray<Int>型を指定すると、後ろ側の型は<>で省略できる。
val array: Array<Int> = emptyArray<>()
角括弧[...]で配列の要素にアクセスでき、配列のインデックスは0から始まる。
println(nums[0])
println(cols[1])
空(Empty)の配列宣言
次の関数で特定の型の空配列を宣言できる。
val array1 = emptyArray<Int>()
val array2 = arrayOf<Int>()
fun main() {
val array1 = emptyArray<Int>()
println("array1: ${array1.contentToString()}")
val array2 = arrayOf<Int>()
println("array2: ${array2.contentToString()}")
}
Output:
array1: []
array2: []
配列宣言時に初期値を設定する
arrayOf<Type>(values)で配列に初期値を設定できる。
このとき、(values)から型を推論できるため、<Type>は省略できる。
fun main() {
val array1 = arrayOf<Int>(1, 2, 3, 4)
println("array1: ${array1.contentToString()}")
val array2 = arrayOf("Red", "Green", "Blue")
println("arr: ${array2.contentToString()}")
}
Output:
array1: [1, 2, 3, 4]
array2: [Red, Green, Blue]
同じ値で配列を初期化する
Array(size) { value }は、sizeで指定した大きさの配列を作成し、すべての要素に指定したvalueを代入する。
fun main() {
val array = Array(3) { 20 }
println("array: ${array.contentToString()}")
}
Output:
array: [20, 20, 20]
連続した数値で配列を初期化する
Array(size) { lambda }は、sizeで指定した大きさの配列を作成し、すべての要素にlambdaの戻り値を設定する。
lambdaに渡されるitは要素のindex値になるため、次のように連続した数値で配列を初期化できる。
fun main() {
val array1 = Array(5) { it -> it }
println("array1: ${array1.contentToString()}")
val array2 = Array(5) { it -> it + 10 }
println("array2: ${array2.contentToString()}")
}
Output:
array1: [0, 1, 2, 3, 4]
array2: [10, 11, 12, 13, 14]
Nullで配列を初期化する
arrayOfNulls<Type>(size)でnullで埋められた配列を作成できる。
fun main() {
val array = arrayOfNulls<Int>(5)
println("array: ${array.contentToString()}")
}
Output:
array: [null, null, null, null, null]
基本型配列の宣言
KotlinにはIntArray、BooleanArray、DoubleArray、LongArrayなどの基本型配列が用意されている。
このような配列を作成するときは、intArrayOf()、booleanArrayOf()などを使用できる。
fun main() {
val iniArray: IntArray = intArrayOf(1, 2, 3)
println("iniArray: ${iniArray.contentToString()}")
val booleanArray: BooleanArray = booleanArrayOf(true, true, false)
println("booleanArray: ${booleanArray.contentToString()}")
val doubleArray: DoubleArray = doubleArrayOf(1.2, 2.3, 3.4)
println("doubleArray: ${doubleArray.contentToString()}")
}
Output:
iniArray: [1, 2, 3]
booleanArray: [true, true, false]
doubleArray: [1.2, 2.3, 3.4]
主な関数
forEach関数
forEach関数はリストに対して反復処理を行える。
fun main() {
val array = arrayOf(1, 2, 3, 4, 5)
// lambdaとして使用する方法である。
array.forEach({ element ->
print("$element,")
}) // => 1,2,3,4,5
println()
// 括弧'()'は省略できる。
array.forEach { element ->
print("$element,")
}
println()
// itでラムダの代わりにオブジェクトを受け取れる。
array.forEach {
print("$it,")
} // => 1,2,3,4,5
}
Output:
1,2,3,4,5,
1,2,3,4,5,
1,2,3,4,5,
filter関数
filter関数はリストに条件をかけ、その条件に一致する新しいリストを返す。
fun main() {
val array = arrayOf(1, 2, 3, 4, 5) // => 1,2,3,4,5の配列を作成する。
// filterの条件を満たす要素を返す。
array.filter({ e -> e % 2 == 0 }).forEach { println(it) } // => 2,4
// 括弧'()'は省略できる。
array.filter { e -> e % 2 == 0 }.forEach { println(it) } // => 2,4
// lambdaを使わなくても'it'でオブジェクトを受け取れる。
array.filter { it % 2 == 0 }.forEach { println(it) } // => 2,4
}
Output:
2,4,
2,4,
2,4,
map関数
map関数はリストの要素を変換して受け取ることができる。
// 名前と年齢を持つクラス定義
private class Person(val name: String, val age: Int)
fun main() {
val array = arrayOf(
Person("Charlie", 20),
Person("devkuma", 31),
Person("kimkc", 42),
)
// lambdaでuserインスタンスを受け取れる。
array.map({ user -> user.name }).forEach { print("${it},") }
println()
// 括弧'()'は省略できる。
array.map { user -> user.name }.forEach { print("${it},") }
println()
// 'it'でオブジェクトを受け取れる(この'it'はuserインスタンスを指す)。
array.map { it.name }.forEach { print("${it},") }
}
Output:
Charlie,devkuma,kimkc,
Charlie,devkuma,kimkc,
Charlie,devkuma,kimkc,
sum関数
sum関数は入力した数値を合計する。
fun main() {
// Array<Int>インスタンスを作成する。
val array = arrayOf(1, 2, 3, 4, 5)
// 合計する(1 + 2 + 3 + 4 + 5)。
println(array.sum()) // => 15
}
Output:
15
take関数
take関数はリストの要素を入力した数だけ取得する。
fun main() {
val array = arrayOf(1, 2, 3, 4, 5)
array.take(1).forEach { print(it) } // => 1
println()
array.take(2).forEach { print(it) } // => 1, 2
println()
array.take(3).forEach { print(it) } // => 1, 2, 3
println()
array.take(4).forEach { print(it) } // => 1, 2, 3, 4
println()
array.take(5).forEach { print(it) } // => 1, 2, 3, 4, 5
}
Output:
1
12
123
1234
12345
drop関数
drop関数はリストの要素を先頭から入力した数だけ削除し、残りを取得する。
fun main() {
val array = arrayOf(1, 2, 3, 4, 5)
array.drop(1).forEach{print(it)} // => 2, 3, 4, 5
println()
array.drop(2).forEach{print(it)} // => 3, 4, 5
println()
array.drop(3).forEach{print(it)} // => 4, 5
println()
array.drop(4).forEach{print(it)} // => 5
println()
array.drop(5).forEach{print(it)} // => 空のArray
}
Output:
2345
345
45
5