Haskell 程序将列表转换为映射


在 Haskell 中,我们将使用 fromList 和 foldl 函数将列表转换为映射。这也可以使用递归和模式匹配来完成。在第一个示例中,我们将使用 (listToMap xs = Map.fromList xs) 函数,在第二个示例中,我们将使用 (listToMap xs = List.foldl' (\acc (k, v) -> Map.insert k v acc) Map.empty xs) 函数。在第三个示例中,我们将使用递归函数的基本情况和递归情况。

算法

  • 步骤 1 − 导入限定的 Data.Map 模块。

  • 步骤 2 − 使用 fromList 函数定义 listToMap 函数

  • 步骤 3 − 程序执行将从 main 函数开始。main() 函数控制整个程序。它写成 main = do。

  • 步骤 4 − 定义变量“myList”,它将保存要转换为映射的列表值。

  • 步骤 5 − 一旦函数被调用,相应的映射值将被打印到控制台。

示例 1

在此示例中,列表使用 fromList 函数转换为映射。

import qualified Data.Map as Map

listToMap :: Ord k => [(k, v)] -> Map.Map k v
listToMap xs = Map.fromList xs

main :: IO ()
main = do
  let myList = [("apple", 1), ("banana", 2), ("orange", 3)]
  let myMap = listToMap myList
  print myMap

输出

[1 of 1] Compiling Main             ( main.hs, main.o )
Linking main ...
fromList [("apple",1),("banana",2),("orange",3)]

示例 2

在此示例中,列表使用 foldl 函数转换为映射。

import qualified Data.List as List
import qualified Data.Map as Map

listToMap :: Ord k => [(k, v)] -> Map.Map k v
listToMap xs = List.foldl' (\acc (k, v) -> Map.insert k v acc) Map.empty xs

main :: IO ()
main = do
  let myList = [("apple", 1), ("banana", 2), ("orange", 3)]
  let myMap = listToMap myList
  print myMap

输出

[1 of 1] Compiling Main             ( main.hs, main.o )
Linking main ...
fromList [("apple",1),("banana",2),("orange",3)]

示例 3

在此示例中,列表使用递归和模式匹配转换为映射。

import qualified Data.Map as Map

listToMap :: Ord k => [(k, v)] -> Map.Map k v
listToMap [] = Map.empty
listToMap ((k, v):xs) = Map.insert k v (listToMap xs)

main :: IO ()
main = do
  let myList = [("apple", 1), ("banana", 2), ("orange", 3)]
  let myMap = listToMap myList
  print myMap

输出

[1 of 1] Compiling Main             ( main.hs, main.o )
Linking main ...
fromList [("apple",1),("banana",2),("orange",3)]

结论

在 Haskell 中,列表可以转换为 Map 数据结构,其中列表中的每个元素都被视为键值对。Map 数据结构在 Data.Map 模块中定义,它是一个存储键值对集合的容器。要将列表转换为 Map,我们可以使用 Data.Map 模块提供的 fromList 函数。fromList 函数接受键值对列表并返回一个 Map,该 Map 将每个键映射到其对应值。我们还可以使用 foldl 函数以及递归和模式匹配进行转换。

更新于: 2023年3月28日

532 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告