gpt4 book ai didi

haskell - 获取列表中元组的元素

转载 作者:行者123 更新时间:2023-12-02 21:07:19 24 4
gpt4 key购买 nike

如何访问列表中元组的元素?

例如

func :: [(Int, Int, Int)] -> Int
func (x:xs) --here I want to access c of every tuple (a,b,c)

最佳答案

您可以创建一个简单的函数来访问元组的第三个元素,然后只需使用 map

thrd :: (a, b, c) -> c
thrd (a, b, c) = c

func :: [(Int, Int, Int)] -> [Int]
func xs = map thrd xs

这将为您提供一个包含每个元组的第三个元素的列表。我不知道你想对它做什么以将其转换为单个 Int , 尽管。您能详细说明一下您的用例吗?

<小时/>

要获得这些元素的平均值,您必须进行一些转换。你不能分割Int s,因为Int不是 Fractional 的实例定义 (/) 的类型类。您可以编写一个平均函数,例如

average :: Fractional a => [a] -> a
average xs = sum xs / fromIntegral (length xs)

但这意味着您必须转换 map thrd xs 中的每个元素。进入Fractional 。为 Int 制作专门的平均函数会更有效。类型定义为

averageInt :: Fractional a => [Int] -> a
averageInt xs = fromIntegral (sum xs) / fromIntegral (length xs)

这里的区别在于,您首先对列表求和,然后将该结果转换为 Fractional 。无论哪种方式,您都必须执行求和,但这会减少您必须执行的从列表中元素数量到 1 的转换次数,无论列表大小如何。

然后您可以将其用作

averageThrd :: Fractional a => [(Int, Int, Int)] -> a
averageThrd xs = averageInt $ map thrd xs

FloatDouble都是 Fractional 的实例,您可以根据需要使用一些内联类型注释转换为其中一种类型:

> averageThrd [(0, 0, 1), (0, 0, 2), (0, 0, 3)] :: Double
2.0
> averageThrd [(0, 0, 1), (0, 0, 2), (0, 0, 3)] :: Float
2.0

关于haskell - 获取列表中元组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21105508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com