定位类中的第一个和第二个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定位类中的第一个和第二个值相关的知识,希望对你有一定的参考价值。

在Kotlin的Pair数据类中,它需要2个值:

Pair<out A, out B>

这些值是通过firstsecond命名的属性:

Pair(first: A, second: B)

但是,如果这些属性不存在,那么第一个和属性如何被定位(例如,对于具有两个参数OtherClass<Int, Int>的其他类? - 是否有另一种方法来定位它们?)

PS:为什么Pair是数据类而不是常规类?

答案

A和B不是属性,它们是类型参数。然后使用类型参数来定义属性。

这是对的source code

public data class Pair<out A, out B>(
    public val first: A,
    public val second: B
) : Serializable {

    /**
     * Returns string representation of the [Pair] including its [first] and [second] values.
     */
    public override fun toString(): String = "($first, $second)"
}

您定位属性(firstsecond),而不是类型参数。

假设你有Pair<Int, String>。这意味着AIntBString

firstA类型的财产,secondB类型的财产,因此firstIntsecondString

在回答你的'PS'时,Pair是一个数据类,因为它赋予了usual benefits,例如生成的equals()方法。

另一答案

qazxsw point表示一对通用的两个值,将其视为中间带有分隔符的框。它并不关心你放在分隔器两侧的东西。

什么是第一和第二:

如果你看看Robs答案,你会看到Pair类有两个公共值,一个是名字“first”而另一个叫“second”。它基本上意味着每个盒子(对)都有两面并且它不关心你放在哪一边,默认情况下我把一边称为“第一”而另一边是“第二”如果你想要左边的东西只是首先将它称为“第一个”,如果你想要从右侧获得某些东西,请将其称为第二个。

Pair只是意味着你想要一个盒子,一边拿着一个字符串而另一边拿着一个整数。

Pair("Some Words", 99)只是意味着你想要一个盒子,一边拿着一个字符串(值为1)而另一边拿着一个整数(100)你已经将这个盒子命名为myPair。

既然Kotlin并不关心你放入盒子里的东西的类型,那么就像在myPair = Pair("value 1", 100)中添加一个空值一样是完全可以的,你的工作是检查是否有一个空值被添加或从中提取这对。

检索值:

假设您执行var myPair=Pair(null, 99)之类的操作如果您想查看myPair中的内容,您可以执行以下操作:

myPair = Pair("value 1", 100)

为什么Pair是数据类而不是常规类?

数据类的主要目的是保存数据。数据类有一些限制,因此编译器可以为所有数据类添加一些标准功能,如eaquls(),hashCode()

Pair类意味着保存一对数据,因此可以从一些标准功能中受益,比如toString()。

你可以阅读详细资料println(myPair.first) -> "value 1" println(myPair.second) -> 100

另一答案

如果你看看如何实现HERE,你会发现它是一个简单的数据类,有两个属性:Pairfirst

second

因此,您可以使用以下语法显然访问这些属性:public data class Pair<out A, out B>( public val first: A, public val second: B ) pair.first。第一个和第二个名称不是特殊关键字,只是属性名称。

请注意,一般情况下,对和数据类有一些特殊之处,可以在这里观察到:

pair.second

这种技术被称为val p = Pair(1, 2) val (f: Int, s: Int) = p println(f) //1 println(s) //2 ,并且可以通过destructuring运算符实现,如果你使用componentX类,它们会自动为你生成。

以上是关于定位类中的第一个和第二个值的主要内容,如果未能解决你的问题,请参考以下文章

函数如何使用 oracle 中的集合返回第二个和第四个值?答案是 42 和 46

在 printf 语句中的第一个值之前打印第二个值的原因是啥? [复制]

从片段类中的对话框添加项目到recyclerview。

逗号运算符返回参数列表中的第一个值而不是第二个值?

如何根据分隔符“|”之前的匹配值获取字符串中的第二个值?

如何使用选择查询为每个唯一的第二个值获取一个值中的最小值?