使用通配符查找元组列表元素的索引
Finding index of an element of a list of tuples with a wildcard
我正在尝试使用通配符 Haskell 在元组列表中查找元素的索引。
我调整了我的类型以使其更容易解释。目前我的思路是使用elemIndex。
例如,
> elemIndex 2 [1,2,3,4,5]
Just 1
但在我的例子中,我有一个这样的元组列表:
> elemIndex (2, 20) [(1, 10),(2, 20),(3, 30),(4, 40),(5,50)]
Just 1
我希望能够只提供元组的第一部分并获取索引,例如:
> elemIndex (2, _) [(1, 10),(2, 20),(3, 30),(4, 40),(5,50)]
Just 1
但我得到的结果是这样的:
<interactive>:58:15: error:
• Found hole: _ :: Integer
• In the expression: _
In the first argument of ‘elemIndex’, namely ‘(2, _)’
In the expression:
elemIndex (2, _) [(1, 10), (2, 20), (3, 30), (4, 40), ....]
• Relevant bindings include
it :: Maybe Int (bound at <interactive>:58:1)
我在解读错误消息时遇到问题,也不知道如何解决该错误。
任何帮助将不胜感激,谢谢!
_
不是 通配符,它是 typed hole [haskell-wiki]。类型孔通常用于找出要填充的类型。
这里可以使用的是findIndex :: (a -> Bool) -> [a] -> Maybe Int
。在这里,您可以使用谓词 (a -> Bool
) 而不是指定要搜索的元素,然后函数将为给定列表 return 满足谓词的第一个索引(包装在 Just
数据构造函数),或 Nothing
如果找不到元素。
因此您可以将其实现为:
Prelude Data.List> findIndex ((2 ==) . fst) [(1, 10),(2, 20),(3, 30),(4, 40),(5,50)]
Just 1
我正在尝试使用通配符 Haskell 在元组列表中查找元素的索引。
我调整了我的类型以使其更容易解释。目前我的思路是使用elemIndex。
例如,
> elemIndex 2 [1,2,3,4,5]
Just 1
但在我的例子中,我有一个这样的元组列表:
> elemIndex (2, 20) [(1, 10),(2, 20),(3, 30),(4, 40),(5,50)]
Just 1
我希望能够只提供元组的第一部分并获取索引,例如:
> elemIndex (2, _) [(1, 10),(2, 20),(3, 30),(4, 40),(5,50)]
Just 1
但我得到的结果是这样的:
<interactive>:58:15: error:
• Found hole: _ :: Integer
• In the expression: _
In the first argument of ‘elemIndex’, namely ‘(2, _)’
In the expression:
elemIndex (2, _) [(1, 10), (2, 20), (3, 30), (4, 40), ....]
• Relevant bindings include
it :: Maybe Int (bound at <interactive>:58:1)
我在解读错误消息时遇到问题,也不知道如何解决该错误。 任何帮助将不胜感激,谢谢!
_
不是 通配符,它是 typed hole [haskell-wiki]。类型孔通常用于找出要填充的类型。
这里可以使用的是findIndex :: (a -> Bool) -> [a] -> Maybe Int
。在这里,您可以使用谓词 (a -> Bool
) 而不是指定要搜索的元素,然后函数将为给定列表 return 满足谓词的第一个索引(包装在 Just
数据构造函数),或 Nothing
如果找不到元素。
因此您可以将其实现为:
Prelude Data.List> findIndex ((2 ==) . fst) [(1, 10),(2, 20),(3, 30),(4, 40),(5,50)]
Just 1