小编Mic*_*l K的帖子

如何使用Numeric [T]表示任何数字类型的零

我有一段Scala代码,我想使其更加通用。我知道那是Numeric[T]存在的,但是我不确定如何使用它。

  def sumMaps[A](m1: Map[A, Long], m2: Map[A, Long]): Map[A, Long] = {
    m1 ++ m2.map { case (k, v) => k -> (v + m1.getOrElse(k, 0L)) }
  }

  def sumMaps[A](m1: Map[A, Int], m2: Map[A, Int]): Map[A, Int] = {
    m1 ++ m2.map { case (k, v) => k -> (v + m1.getOrElse(k, 0)) }
  }

  def sumMaps[A](m1: Map[A, Double], m2: Map[A, Double]): Map[A, Double] = {
    m1 ++ m2.map { case (k, v) => k -> (v + …
Run Code Online (Sandbox Code Playgroud)

generics scala type-inference zero typeclass

3
推荐指数
1
解决办法
59
查看次数

检查范围是否在Scala中包含值的通用方法

我想编写一个通用类,该通用类包含一个范围的端点,但是通用版本会引发编译错误: value >= is not a member of type parameter A

final case class MinMax[A <: Comparable[A]](min: A, max: A) {
  def contains[B <: Comparable[A]](v: B): Boolean = {
    (min <= v) && (max >= v)
  }
}
Run Code Online (Sandbox Code Playgroud)

具体版本按预期工作:

final case class MinMax(min: Int, max: Int) {
  def contains(v: Int): Boolean = {
    (min <= v) && (max >= v)
  }
}

MinMax(1, 3).contains(2) // true
MinMax(1, 3).contains(5) // false
Run Code Online (Sandbox Code Playgroud)

generics scala typeclass

3
推荐指数
1
解决办法
59
查看次数

在编译时验证 Scala 案例类

我在 Scala 2.11 应用程序中有一个案例类,它有一个依赖于案例类的字段名称的方法,如下所示:

final case class Foo(
  val a: String,
  val b: String,
  val c: String
) {
  def partitionColumns: Seq[String] = Seq("b", "c")
}
Run Code Online (Sandbox Code Playgroud)

如果其中一个partitionColumns不作为案例类中的字段存在,我想要一个编译时检查来抛出一个错误,例如一些会捕捉到这个的东西:

final case class Bar(
  val a: String,
  val b: String,
  val c: String
) {
  def partitionColumns: Seq[String] = Seq("x", "y")
}

Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经将分区行为封装在一个 trait 中,这减少了可能出错的次数/位置:

final case class Bar(
  val a: String,
  val b: String,
  val c: String
) {
  def partitionColumns: Seq[String] = Seq("x", "y")
}

Run Code Online (Sandbox Code Playgroud)

但是如果 trait 写错了,就没有检查,例如这段代码,它编译得很好:

sealed …
Run Code Online (Sandbox Code Playgroud)

scala case-class scala-2.11 apache-spark

3
推荐指数
1
解决办法
230
查看次数

使用多个isin子句进行pandas索引

如果我想一次对多个列进行is-in测试,我可以这样做:

>>> from pandas import DataFrame
>>> df = DataFrame({'A': [1, 2, 3], 'B': [1, 4, 7], 'C' : [10, 12, 18]})   
>>> mask = df[['A','B']].isin({'A': [1, 3], 'B': [4, 7, 12]}).all(axis=1)
>>> df = df[mask]
Run Code Online (Sandbox Code Playgroud)

这有效 - 是否有更简洁的解决方案?

python pandas

2
推荐指数
3
解决办法
1万
查看次数