【问题标题】:Map with unordered tuple as key以无序元组为键的映射
【发布时间】:2014-10-06 16:58:51
【问题描述】:

我在一个具有相同类型的两个部分的元组和一个 Int 之间有一个映射。

Map (a,a) Int

独立于元组中as 的顺序,我希望稍后能够将其从地图中取出。

lookup (2,1) map == lookup (1,2) map

如果不插入元组两次,这可能吗?

【问题讨论】:

    标签: haskell map tuples


    【解决方案1】:

    您可以将密钥设为(max a b, min a b)

    【讨论】:

      【解决方案2】:

      您可以对元组进行排序,然后使用它来插入元组(也可以搜索):

      sortTup :: (Ord a) => (a, a) -> (a, a)
      sortTup (a, b) = (min a b, max a b)
      

      使用它你会看起来像这样:

      Prelude Data.Map> let a = Map.fromList [(sortTup (2,1), 5]
      Prelude Data.Map> lookup (sortTup (1,2))
      5
      

      【讨论】:

        【解决方案3】:

        你可以试试这个:

        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
        

        【讨论】:

          猜你喜欢
          • 2011-04-06
          • 2015-05-28
          • 2017-03-20
          • 1970-01-01
          • 1970-01-01
          • 2018-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多