首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问元组中的特定元素

访问元组中的特定元素
EN

Stack Overflow用户
提问于 2011-05-01 04:12:58
回答 5查看 70.3K关注 0票数 43

Haskell-新手报告。问题如下:在Haskell中,我们有返回2元组的第一个和第二个元素的fstsnd。为什么我们没有一种简单的方法来访问任何元组中的第i个元素?现在我有一个三元组,我想读取第一个元素,完成这个任务的唯一方法是做模式匹配技巧。为什么不能更容易地做到这一点?或者,也许有一些简单的方法?

EN

回答 5

Stack Overflow用户

发布于 2011-05-01 04:50:41

查看hackage上的tuple library。它具有重载函数,用于对元组进行各种操作(直到预定义的大小)。

票数 21
EN

Stack Overflow用户

发布于 2011-05-01 04:42:34

N元组不是用于通过Int键进行索引的数据结构,相反,您应该查看偏向于索引的数据结构,如arraysfinger-trees.

现在,人们可以想象编写a typeclass for a family of tuple types providing an index operation,然而,我们已经有了数组,并且有许多必要的样板来使任何类型的元组无缝地提供这种操作。所获得的力量不值得你付出这些努力。

票数 13
EN

Stack Overflow用户

发布于 2014-05-26 06:59:41

为什么不能简单一点呢?或者,也许有一些简单的方法?

使用最新的替代方案lens包可能会更容易。Tuple module有多达9个元素元组的选择器,如果需要,可以直接定义更多。

代码语言:javascript
运行
复制
> import Control.Lens
> data A = A deriving (Show)
> (1, '2', "3", A) ^. _1
1
> (1, '2', "3", A) ^. _2
'2'
> (1, '2', "3", A) ^. _3
"3"
> (1, '2', "3", A) ^. _4
A

您还可以使用lens包来多态地更新元素,在更新时更改类型。

使用和不使用中缀运算符:

代码语言:javascript
运行
复制
> (1, '2', "3", A) & _1 .~ "wow"
("wow",'2',"3",A)
 > set _1 "wow" (1, '2', "3", A)
("wow",'2',"3",A)

github readme是一个很好的起点,可以开始了解更多关于基本理论和大量示例的信息。

不仅仅是元组

类似的语法适用于TraverablesFoldables,因此树、映射、向量等。例如,如果我有一个元组列表,我可以通过组合element 1来访问第一个索引元素来访问第一个索引元素,并使用_3来访问第三个元组元素。

代码语言:javascript
运行
复制
[(1,2,3),(4,5,6),(7,8,9)] ^? element 1 . _3
Just 6
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5844347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档