(a -> a -> a) ->-6ren">
gpt4 book ai didi

scala - 在 Scala 中,Map 是否有与 Haskell 的 "fromListWith"等效的值?

转载 作者:行者123 更新时间:2023-12-02 20:56:28 25 4
gpt4 key购买 nike

在Haskell中,有一个函数叫做fromListWith它可以从函数(用于合并具有相同键的值)和列表生成 Map:

fromListWith :: Ord k => (a -> a -> a) -> [(k, a)] -> Map k a

以下表达式将被计算为true:

fromListWith (++) [(5,"a"), (5,"b"), (3,"b"), (3,"a"), (5,"a")] == fromList [(3, "ab"), (5, "aba")]

在 Scala 中,对于 List 对象有一个类似的函数,名为 toMap ,它也可以将列表转换为 Map,但它不能有参数处理重复键的函数。

有人对此有什么想法吗?

最佳答案

除了使用 scalaz 之外,您还可以自己定义一个:

implicit class ListToMapWith[K, V](list: List[(K, V)]) {
def toMapWith(op: (V, V) => V) =
list groupBy (_._1) mapValues (_ map (_._2) reduce op)
}

这是一个使用示例:

scala> val testList = List((5,"a"), (5,"b"), (3,"b"), (3,"a"), (5,"a"))
scala> testList toMapWith (_ + _)
res1: scala.collection.immutable.Map[Int,String] = Map(5 -> aba, 3 -> ba)

关于scala - 在 Scala 中,Map 是否有与 Haskell 的 "fromListWith"等效的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30263044/

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