layout | title | original-doc |
---|---|---|
doc |
元组(Tuples) |
元组(二元对(pair)、三元组(triples)、依此类推...)在我们需要一个轻量级的组织数据的机制时很有用。 比如,当函数需要返回多个值的时候。
在Kotlin中,有22个元组类型:Tuple0
到Tuple22
。Tuple0(也被叫做Unit)有0个类型参数,
Tuple1有一个,依次类推。类型参数决定元组中每一个元素的类型。比如,Tuple2是如下定义的:
{% highlight java %}
class Tuple2<out T1, out T2>(
val _1 : T1,
val _2 : T2
)
{% endhighlight %}
我们可以使用简写的语法来表示元组:
{% highlight java %} val intStrPair : #(Int, String) = #(1, "") // 和 'Tuple2<Int, String>(1, "")' 一样 {% endhighlight %}
使用模式匹配可以反问元组的元素: {% highlight java %} when (x) { is #(null, *) => throw NullPointerException() is #(val a, val b) => print(a, b) } {% endhighlight %}
或者直接使用访问器_1
、_2
等:
{% highlight java %}
print("left = ${pair._1}, right = ${pair._2}")
{% endhighlight %}
如果希望访问器更可读,可以使用带标签的元组
我们可以给元组的元素定义标签: {% highlight java %} val point : #(x : Int, y : Int) {% endhighlight %}
这样元组就可以利用这些标签来访问: {% highlight java %} print("x = ${point.x}, y = ${point.y}") {% endhighlight %}
我们甚至可以用命名的元素来创建元组,并且这时候顺序也不再重要:
{% highlight java %} val point : #(x : Int, y : Int) = #(y = 10, x = 5) {% endhighlight %}