Kotlinの配列を色々試してみた。
繰り返し処理
Scalaなどでもお馴染みの
forcachforEachでぐるぐるまわします。
foreachforEachに指定する関数では、要素を「it」で参照できるみたいです。groovyちっくですね。
rubyのように、each_widh_indexみたいなので添字付きでぐるぐるまわすことはできないのかな。
var arr1 = array(1, 2, 3, 4)
arr1.forEach {println(it)}
配列の各要素を連結
おなじみのjoin関数を使って連結出来る。
// カンマで連結
arr.join(",") // -> 1,2,3,4
// プレフィックス、サフィックスを指定して連結
arr.join(",", "<", ">") // -> <1,2,3,4>
要素の中身全てが指定した条件を満たすかチェック
all関数を使用する。条件は、all関数の引数として指定してあげる。
// 全ての要素で条件をみたすことができない場合
var arr1 = array(1, 1, 1, 0)
arr1.all {it == 1} // -> false
// 全ての要素で条件をみたすことが出来る場合
var arr2 = array(1, 1, 1, 1)
arr2.all {it == 1} // -> true
// 文字列の場合
var str = array("1", "2", "3")
str.all {it <= "3"} // -> true
str.all {it <= "2"} // -> false
要素の中のどれか1つが指定した条件を満たすかチェック
any関数を使用するる。条件は、any関数の引数として指定してあげる。
// 要素ないに1つでも条件を満たす値がある場合
var arr1 = array(1, 0, 2, 0)
arr1.any {it == 1} // -> true
// 要素ないの値が全て条件を満たさない場合
var arr2 = array("1", "2", "3")
arr2.any{it > "3"} // -> false
要素の中で条件を満たす最初の値を取得する
他の言語でもお馴染みのfind関数を使います。使い方も他の言語と同じですね。
var arr1 = array(1, 0, 2, 0)
// 要素が見つかる場合
arr1.find {it == 0} // -> 0
arr1.find {it == 2} // -> 2
// 要素が見つからない場合
arr1.find {it == -1} // -> null
要素の中で条件に一致したものを新しい配列で取得する
他の言語(Scala)でもお馴染みのfilter関数を使います。使い方も他の言語と同じですね。
var arr1 = array(1, 0, 2, 0)
arr1.filter {it % 2 == 0} // -> [0, 2, 0]
var arr2 = array("1", "2", "3")
arr2.filter {it.length() == 1} // -> ["1", "2", "3"]
// 条件に一致する要素が存在しない場合は、空の配列が戻ってきます。
arr2.filter {it.length() != 1} // -> []
要素の中で条件に一致しないものを新しい配列で習得する
filterの逆ですね。これも他の言語(Scala)でもお馴染みのfilterNot関数を使います。使い方も他の言語と同じですね。
var arr1 = array(1, 0, 2, 0)
arr1.filterNot {it % 2 == 0} // -> [1]
var arr2 = array("1", "2", "3")
arr2.filterNot {it.length() != 1} // -> ["1", "2", "3"]
arr2.filterNot {it.length() == 1} // -> []
各要素の値を変換して新しいCollectionを取得する。
ScalaにもあるflatMapを使ってあげるといけます。
引数の型パラメータと戻りの型パラメータが異なるから、flatMapに型パラメータ指定してあげないと動かなかった。
なんか間違ってるのかな?
ちなみに、arrayListやlinkedList関数は、「std.utilパッケージ」にあるのでimportしてあげないと使えないです。
// 各要素の値を2倍にする。
var arr1 = array(1, 2, 3)
arr1.flatMap<Int, Int> {(n) -> arrayList(n * 2)} // -> [2, 4, 6]
// 各要素先頭にstr =を加える。
var arr2 = array("1", "2", "3")
arr2.flatMap<String, String>{(s) -> linkedList("str = ${s}")} // -> [str = 1, str = 2, str = 3]