Haskell 以无序元组作为键的映射
我在具有相同类型的两部分的元组和Int之间有一个映射Haskell 以无序元组作为键的映射,haskell,map,tuples,Haskell,Map,Tuples,我在具有相同类型的两部分的元组和Int之间有一个映射 Map (a,a) Int 独立于元组中as的顺序,我希望稍后能够将其从映射中取出 lookup (2,1) map == lookup (1,2) map 不插入两次元组就可以了吗?您可以设置键(max a b,min a b)您可以对元组进行排序,然后使用它插入元组(也可以进行搜索): 使用它,您将看到如下情况: Prelude Data.Map> let a = Map.fromList [(sortTup (2,1), 5]
Map (a,a) Int
独立于元组中as
的顺序,我希望稍后能够将其从映射中取出
lookup (2,1) map == lookup (1,2) map
不插入两次元组就可以了吗?您可以设置键
(max a b,min a b)
您可以对元组进行排序,然后使用它插入元组(也可以进行搜索):
使用它,您将看到如下情况:
Prelude Data.Map> let a = Map.fromList [(sortTup (2,1), 5]
Prelude Data.Map> lookup (sortTup (1,2))
5
你可以试试这个:
import Control.Applicative
mylookup :: (Ord a) => (a,a) -> Map (a,a) Int -> Maybe Int
mylookup (x,y) m = lookup (x,y) m <|> lookup (y,x) m
导入控件。应用程序
mylookup::(Ord a)=>(a,a)->映射(a,a)Int->可能Int
mylookup(x,y)m=查找(x,y)m查找(y,x)m
import Control.Applicative
mylookup :: (Ord a) => (a,a) -> Map (a,a) Int -> Maybe Int
mylookup (x,y) m = lookup (x,y) m <|> lookup (y,x) m