Tuple2 的概念目的是什么?
what's the conceptual purpose of the Tuple2?
将此作为 this SO question
的跟进
我是 Scala 的新手,正在学习 99 problems。 p9 的给定解决方案是:
object P09 {
def pack[A](ls: List[A]): List[List[A]] = {
if (ls.isEmpty) List(List())
else {
val (packed, next) = ls span { _ == ls.head }
if (next == Nil) List(packed)
else packed :: pack(next)
}
}
}
span function 在这里完成所有工作。正如您从 API 文档(它是 link)中看到的那样,跨度 returns 是一个 Tuple2(实际上文档说它是 returns 一对 - 但它已被弃用,取而代之的是 or元组 2)。我试图弄清楚为什么你没有得到像列表列表之类的东西,并且偶然发现了上面的 SO link。据我了解,Tuple2 的原因与提高性能有关,因为不必处理 Java 的 'boxing/unboxing' 之类的东西,例如整数到整数之类的对象。我的问题是
1) 这个说法准确吗?
2) 是否有其他原因导致像 span 到 return 一个 Tuple2?
谢谢!
span
returns 刚好是两个值。 Tuple2
可以恰好包含两个值。列表可以包含任意多个值。因此 Tuple2
比使用列表更合适。
TupleN
对象与 "standard" List
+ 相比至少有两个主要差异:
- (不太重要)元组的大小是事先已知的,允许更好地推理它(由程序员和编译器)。
- (更重要的是)元组为其每个元素保留类型信息/"slots".
请注意,如前所述,类型 Tuple2
是 TupleN
家族的一部分,它们都使用相同的概念。例如:
scala> ("1",2,3l)
res0: (String, Int, Long) = (1,2,3)
scala> res0.getClass
res1: Class[_ <: (String, Int, Long)] = class scala.Tuple3
正如你在这里看到的,三元组中的每个元素都有不同的类型,允许更好的模式匹配、更严格的类型保护等。
+异构列表在 Scala 中也是可能的,但是,到目前为止,它们不是标准库的一部分,而且可以说更难理解,尤其是对于新手。
将此作为 this SO question
的跟进我是 Scala 的新手,正在学习 99 problems。 p9 的给定解决方案是:
object P09 {
def pack[A](ls: List[A]): List[List[A]] = {
if (ls.isEmpty) List(List())
else {
val (packed, next) = ls span { _ == ls.head }
if (next == Nil) List(packed)
else packed :: pack(next)
}
}
}
span function 在这里完成所有工作。正如您从 API 文档(它是 link)中看到的那样,跨度 returns 是一个 Tuple2(实际上文档说它是 returns 一对 - 但它已被弃用,取而代之的是 or元组 2)。我试图弄清楚为什么你没有得到像列表列表之类的东西,并且偶然发现了上面的 SO link。据我了解,Tuple2 的原因与提高性能有关,因为不必处理 Java 的 'boxing/unboxing' 之类的东西,例如整数到整数之类的对象。我的问题是
1) 这个说法准确吗?
2) 是否有其他原因导致像 span 到 return 一个 Tuple2?
谢谢!
span
returns 刚好是两个值。 Tuple2
可以恰好包含两个值。列表可以包含任意多个值。因此 Tuple2
比使用列表更合适。
TupleN
对象与 "standard" List
+ 相比至少有两个主要差异:
- (不太重要)元组的大小是事先已知的,允许更好地推理它(由程序员和编译器)。
- (更重要的是)元组为其每个元素保留类型信息/"slots".
请注意,如前所述,类型 Tuple2
是 TupleN
家族的一部分,它们都使用相同的概念。例如:
scala> ("1",2,3l)
res0: (String, Int, Long) = (1,2,3)
scala> res0.getClass
res1: Class[_ <: (String, Int, Long)] = class scala.Tuple3
正如你在这里看到的,三元组中的每个元素都有不同的类型,允许更好的模式匹配、更严格的类型保护等。
+异构列表在 Scala 中也是可能的,但是,到目前为止,它们不是标准库的一部分,而且可以说更难理解,尤其是对于新手。