scala - Scala 或库中是否存在与 Clojure 的 diff 等价的应用到 map 的方法?

标签 scala clojure maps diff equivalent

在 Clojure 中,diff 函数可以应用于 map ,而在 Scala 中似乎并非如此,是否有人知道 Scala 中的某些东西可以更容易地获取 Clojure diff 函数在应用于 map 时获得的内容?

这是 Clojure diff 函数的解释以供引用。

http://clojuredocs.org/clojure_core/clojure.data/diff

最佳答案

这相当于 Clojure 的 diff :

import collection.generic.CanBuildFrom

def diff[T, Col](x: Col with TraversableOnce[T], y: Col with TraversableOnce[T])
        (implicit cbf: CanBuildFrom[Col, T, Col]): (Col, Col, Col) = {
  val xs = x.toSet
  val ys = y.toSet
  def convert(s: Set[T]) = (cbf(x) ++= s).result
  (convert(xs diff ys), convert(ys diff xs), convert(xs intersect ys))
}

它可以对任何类型的 TraversableOnce 进行操作并将返回与其参数类型相同的结果:
scala> diff(Map(1 -> 2), Map(1 -> 2))
res35: (scala.collection.immutable.Map[Int,Int], scala.collection.immutable.Map[Int,Int], scala.collection.immutable.Map[Int,Int]) = (Map(),Map(),Map(1 -> 2))

关于scala - Scala 或库中是否存在与 Clojure 的 diff 等价的应用到 map 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23570523/

相关文章:

javascript - 如何在 Google GeoChart 中使用不同的颜色

scala - 如何用功能替代方案替换此模式?

android - 如何在 Android 上使用谷歌地图或 mapquest 动态突出显示道路的一侧(或在旁边画一条线)

scala - Scala中Anonymous,Singleton和Companion对象之间的差异

clojure - 使用 environ 访问 leiningen project.clj 中的环境变量时出错

error-handling - 如何访问:cause, :via and :trace keys of an exception in Clojure?

clojure - 尝试处理 Datomic 模式时出现 "Unable to resolve entity"错误

具有多个离线 map 的 iOS 导航应用程序 : which library to use?

scala - 如何在 Spark Notebook 中导入库

scala - 如何将数据帧转换为标签特征向量?