我有一个嵌套的元组结构是怎样的(String,(String,Double))
我想将它转换成(String,String,Double)
。 我有各种嵌套的元组的,我不想手动变换每个。 有什么便捷的方式来做到这一点?
Answer 1:
如果你用无形的 , 这是你需要什么,我想。
Answer 2:
有一个元组没有扁平化。 但如果你知道的结构,你可以这样做:
implicit def flatten1[A, B, C](t: ((A, B), C)): (A, B, C) = (t._1._1, t._1._2, t._2)
implicit def flatten2[A, B, C](t: (A, (B, C))): (A, B, C) = (t._1, t._2._1, t._2._2)
这将拉平元组与任何类型的。 您也可以隐关键字添加至定义。 这仅适用于三个要素。 您可以拼合元组,如:
(1, ("hello", 42.0)) => (1, "hello", 42.0)
(("test", 3.7f), "hi") => ("test", 3.7f, "hi")
多个嵌套的元组不能被压扁在地,因为只有三人在返回类型元素:
((1, (2, 3)),4) => (1, (2, 3), 4)
Answer 3:
不知道这样做的效率刍议,但你可以转换Tuple
来List
与tuple.productIterator.toList
,然后flatten
嵌套列表:
scala> val tuple = ("top", ("nested", 42.0))
tuple: (String, (String, Double)) = (top,(nested,42.0))
scala> tuple.productIterator.map({
| case (item: Product) => item.productIterator.toList
| case (item: Any) => List(item)
| }).toList.flatten
res0: List[Any] = List(top, nested, 42.0)
文章来源: How to flatten a nested tuple?