1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

KotlinのPairとTriple

Posted at

出典 : "Pair and Triple in Kotlin"

一般的に2つの値を返すメソッドの返り値は同一のデータの型で構成されたり異なるデータの型で組み合うことができます。

利用するメソッドが同じクラス内にある場合には一般的にクラスで利用する変数を一つ作ってメソッドで該当の変数の値を設定して必要なところでその変数を利用します。

また、2つの変数を持つデータクラスを作成後、データクラスのオブジェクトを返す方法として利用します。

2つの値を返すメソッドがいくつかあると仮定しましょう。そしてそのメソッドたちが変換する値を成す二つのデータの型は全部違います。

こういう場合は各メソッドに利用するデータクラスをすべての別のものとして定義して作るのでしょうか。

もちろん違います。

Kotlinはそういう用途で利用できるすでに定義されているクラスPairを提供しています。Pairは同一であるか違うデータ型の2つの値を保存したり返す時に利用されます。

2つの値は関係性があるかもしれないし、ないかもしれません。同一であるか異なるデータの型にもなれます。

どう使うか

保存する2つの値をPairのコンストラクタに伝えると簡単にPairクラスのオブジェクトが作られます。

Pair ("Hello", "How are you")
Pair ("First", 1)
Pair (10, null)
Pair (1.5, listOf(null))

var variable1 = "I am a String"
var variable2 = 10
    
Pair (variable1, variable2)

保存された値はどうやって使うか

firstsecondプロパティやcomponetNメソッドを利用してそれぞれ別の変数に保存して使用するか、またはすでにcomponetNメソッドが定義されているため、分離宣言して2つの変数に分けて受け取ることもできます。

var pair = Pair("Hello", "How are you")

println(pair.first)
println(pair.second)

println(pair.component1())
println(pair.component2())

// or

var (firstName, lastName) = Pair("Suneet", "Agrawal")
println(firstName)
println(lastName)

PairオブジェクトにもtoString()のような一般的なメソッドを使用することもできます。

val pair = Pair("I am a String", listOf(1,2,3))
print(pair.toString())

Pairオブジェクトにcopyメソッドを利用する際に値を変更することもできますが、変更されるデータの型は既存と同一である必要があります。

val pair = Pair("I am a String", listOf(1,2,3))
print(pair)
    
val anotherPair = pair.copy(first = "I am new String")
print(anotherPair)

toListメソッドを使用してPairオブジェクトをListに変換した後、Listのインデックスを使用して値を持ってきたり他の作業を行うこともできます。

val pair = Pair("I am a String", 10)
val list = pair.toList()
    
println(list[0])
println(list.get(1))

メソッドに3つの値を返すためにどうすればいいか

Tripleクラスを使用すれば良いです。3つ目の値はthirdプロパティやcomponent3メソッドを使用して検索することができます。

val triple = Triple("I am a String", listOf(1,2,3) , 10)
println(triple.third)
println(triple.component3())

Pairと同じようにcopytoListメソッドも利用できます。

最後に4つ以上の値を返すにはどうすればいいか

この場合は、データクラスを作ってそのクラスのオブジェクトを返した方が良いでしょう。

PairTripleのKotlinの公式ドキュメントはそれぞれのリンクを参考にしてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?