首页 > 解决方案 > 如何将元组列表合并为单个元组?

问题描述

我正在尝试遍历一个元组列表并返回一个值。例如:

[(5, "Cat"), (5, "Dog"), (5, "Horse")]

我想返回一个只将元组中的第二个点组合在一起的元组,所以最终结果是:

(5, "CatDogHorse")

我被困在如何做到这一点上。我尝试使用列表理解并仅获取结果列表的第一个索引,但我找不到将第二项添加到我可以返回的单个变量的方法。

标签: haskellfunctional-programming

解决方案


只要您不关心元组的第一个元素,并且可以保留其中的第一个元素,最直接的方法是使用foldr1连接:

join = foldr1 $ \(x, y) (_, z) -> (x, y ++ z)

对于 3 元组,它是类似的:

join3 = foldr1 $ \(a, b, c) (_, _, d) -> (a, b, c ++ d)

更新:我看到无点风格对你来说是新的,所以这里有相同的定义和明确的参数:

join xs = foldr1 (\(x, y) (_, z) -> (x, y ++ z)) xs
join3 xs = foldr1 (\(a, b, c) (_, _, d) -> (a, b, c ++ d)) xs

推荐阅读