haskell - 如何将元组列表合并为单个元组?
问题描述
我正在尝试遍历一个元组列表并返回一个值。例如:
[(5, "Cat"), (5, "Dog"), (5, "Horse")]
我想返回一个只将元组中的第二个点组合在一起的元组,所以最终结果是:
(5, "CatDogHorse")
我被困在如何做到这一点上。我尝试使用列表理解并仅获取结果列表的第一个索引,但我找不到将第二项添加到我可以返回的单个变量的方法。
解决方案
只要您不关心元组的第一个元素,并且可以保留其中的第一个元素,最直接的方法是使用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
推荐阅读
- python - Python ctypes如何从传递给NASM的字符数组中读取一个字节
- python - 2019年如何安装tensorflow版本<= 0.4.0
- react-native - 在 android 模拟器中显示应用程序时出错
- r - 切换数据框中的列和行,并在单独的列标题下列出观察结果以执行 Anova:单因素
- r - 将数据框转换为 mldr 对象(第二个参数必须是列表)
- reactjs - React:显示来自 api 调用的图像
- html - 创建 CSS 外观,使按钮的行为类似于复选框
- azure-api-management - Azure APIM“rewrite-uri”策略 - 如何删除 URL 后缀?
- javascript - 语义 UI Vue JS 更改不起作用或未触发
- c++ - 如何在不知道大小的情况下编写一个程序来修改动态数组的元素和大小?