Scala 无形状函数对应于常规列表上的普通 "zipped"吗?

标签 scala shapeless

这是一个新问题。

我想做这样的事情:

val a = 1 :: "hi" :: HNil
val b = "foo" :: 2.2 :: HNil
val c = 3 :: 4 :: HNil

val d = (a, b, c).zip // Like "zipped" on tuples of regular lists.

在上面,d 的值应该是:

(1, "foo", 3) :: ("hi", 2.2, 4) :: HNil

有没有一种干净的方法可以做到这一点?

最佳答案

您需要首先将元组转换为 HList。在 1.2.x 中:

import shapeless._, Tuples._

val a = 1 :: "hi" :: HNil
val b = "foo" :: 2.2 :: HNil
val c = 3 :: 4 :: HNil

(a, b, c).hlisted.zipped

在 2.0.0 中,您有更多选择:

import shapeless._, syntax.std.tuple._

val a = 1 :: "hi" :: HNil
val b = "foo" :: 2.2 :: HNil
val c = 3 :: 4 :: HNil

(a, b, c).productElements.zip

或者:

import shapeless._, syntax.std.tuple._

val a = (1, "hi")
val b = ("foo", 2.2)
val c = (3, 4)

(a, b, c).zip

最后一个将返回一个三元组的元组,这可能适合你,也可能不适合你。

关于Scala 无形状函数对应于常规列表上的普通 "zipped"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19572579/

相关文章:

scala - 获取具有特定键的无形记录进行编译

Scala:如何将 ValidatedNel 的 HList 转换为 HList 的 ValidatedNel

scala - 来自对余积进行运算的单态函数的多函数

database - Slick 中的 Scala 枚举(案例对象),良好实践

scala - Spark udf 初始化

java - 如何在 scala 中重写此 java 函数并保持相同的可选输入参数?

scala - 无形:从副产品映射到不同的副产品

scala - 合并 Spark 数据框中的重复列

scala - 递归数据框操作

scala - 通用#to,但带有字段名称?