我正在使用Scala的可变HashMap来逐步增加数百万个键值对.调整这些HashMaps的大小现在是我程序中最慢的部分.我如何告诉Scala从一开始就创建一个非常大的HashMap,以便它(几乎)永远不需要调整大小?
我也很感激提出另一个符合我需求的Scala/Java集合的想法.添加新的键值对并检索给定键的值应该在大致恒定的时间内都可行.
考虑以下工作习惯Seq:
class MySeq[B](val s: Seq[B])
extends Seq[B]
with GenericTraversableTemplate[B, MySeq]
with SeqLike[B, MySeq[B]] {
override def companion = MySeq
def iterator = s.iterator
def apply(i: Int) = s(i)
def length = s.length
override def toString = s map { _.toString } mkString("\n")
}
object MySeq extends SeqFactory[MySeq] {
implicit def canBuildFrom[B]: CanBuildFrom[Coll, B, MySeq[B]] =
new GenericCanBuildFrom[B]
def newBuilder[B] = new ListBuffer[B] mapResult (x => new MySeq(x.toSeq))
}
Run Code Online (Sandbox Code Playgroud)
我想对type参数强加一个绑定B.换句话说,我想要这样的东西(不工作):
class MyA
class MySeq[+B <: MyA](val s: …Run Code Online (Sandbox Code Playgroud) 例如,我想要一种策略来遍历给定 HintDb 中的所有解析提示h,并且对于每个解析提示,它会执行pose h.. 这可能吗?如果是这样,如何?
作为我的一般问题的最小示例,假设我们有以下内容:
Parameter C: Prop.
Definition blah := C.
Run Code Online (Sandbox Code Playgroud)
我想实施一种策略,该策略会blah在目标的所有假设中自动展开。
我试过这个:
Ltac my_auto_unfold := repeat match goal with
| [ H: ?P |- ?P ] => unfold blah in H
end.
Theorem g: blah -> blah -> blah.
Proof.
intros.
my_auto_unfold.
Run Code Online (Sandbox Code Playgroud)
但只有一个假设已经blah展开。