簡體   English   中英

在Scala中,是否有相當於Haskell的“fromListWith”用於Map?

[英]In Scala, is there an equivalent of Haskell's “fromListWith” for Map?

在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)

該STDLIB不具備這樣的功能,但是,沒有一個端口Data.Map可用scalaz確實有提供此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM