【发布时间】:2019-02-15 06:29:03
【问题描述】:
关于this question,我可以通过unzip 在List[(A,B)] 上进行多重分配
但是,现在我发现需要在 List[( (A,B),(C,D) )] 或 List[(A,B,C,D)] 上进行多重分配
我看到有一个 unzip 用于成对,一个 unzip3 用于三胞胎,但是如何解构一对 Tuple2 或单个 Tuple4 以便进行多重分配?我将相应地调整下面的集合类型,但无论哪一种适用于 1 步多分配都可以。
// foo can be a List[(A,B,C,D)] OR List[( (A,B),(C,D) )]
val(a,b,c,d) = foo.unzip
这可行,但被黑了
val(a,b,c_d) foo.unzip3 // foo is a List[(A,B,(C,D))]
因为我最终不得不使用c_d._1 和c_d._2,我正试图通过多重分配变量来避免这种符号
【问题讨论】:
-
我不是反对者,但我同意这个问题需要一些工作。例如,
List只有一个类型参数,所以List[(A, B), (C, D)]的含义有点不清楚——foo的静态类型也是如此,因为它显然不能同时是List[(A, B, C, D)]和List[((A, B), (C, D))]. -
谢谢,“或”表示“List[(A,B,C,D)]”或“List[((A,B),(C,D))]”之一会做。基本问题似乎是解压缩时您必须使用对或三元组,并且超出单个 Tuple2 或 Tuple3 的多重分配变得困难,如果不是不可能的话 AFAIK
-
但是
(A, B, C, D)和((A, B), (C, D))的最小上限是Product,所以foo必须是List[Product],这几乎没用。除非你的意思是你想要两者都使用相同的语法——不是说你真的有一个变量可以是任何一个? -
我可以将结果类型(来自数据库查询)设置为任何我想要的类型。 List[Product] 确实没用,因此是个问题。使用 List[Tuple2] 时,您可以解压缩、多重分配,并保留类型。只要您转到包含一对 Tuple2 的 Tuple4 列表或列表,类型就会丢失。我可以使用 List[Tuple3] 结果并对其进行 unzip3 解压缩,因为第三个参数变成了我不喜欢的 C&D 的散列,所以被黑了
-
+1 只是为了平衡无法解释的反对票,无论是谁投的。
标签: scala list tuples transform