mapValues
方法创建一个新的Map
,该Map
通过应用给定函数将查询结果修改为原始mapValues
。如果两次查询相同的值,则传递给case class A(i: Int) {
print("A")
}
case class B(a: A) {
print("B")
}
case class C(b: B) {
print("C")
}
val map = Map("One" -> 1)
.mapValues(A)
.mapValues(B)
.mapValues(C)
val a = map.get("One")
val b = map.get("One")
的函数将被调用两次。
例如:
ABCABC
这将打印Map
,因为每次查询值时都会创建一组新的案例类。
如何有效地将其转换为预先计算了mapValues
函数的具体Map
?理想情况下,如果map.map(identity)
已经有具体的值,我希望什么也不做。
我知道我可以调用Map
,但这将重新计算mapValues
的索引,这似乎效率很低。如果最后一个map
转换为view
,也是如此。
Map
方法会将严格的Map
变成非严格的function fetchList(ss){
var select = document.getElementById("storeid");
var options = ss;
while (select.options[1]) {
select.removeChild(select.options[1]);
}
for(var i = 0; i < options.length; i++) {
var opt = options[i];
var el = document.createElement("option");
el.textContent = opt;
el.value = opt;
select.appendChild(el);
}
}
,但似乎没有相反的方法。
答案 0 :(得分:2)
您可以在视图上调用force
来强制评估:
scala> val strictMap = map.view.force
ABCstrictMap: scala.collection.immutable.Map[String,C] = Map(One -> C(B(A(1))))
scala> strictMap.get("One")
res1: Option[C] = Some(C(B(A(1))))
scala> strictMap.get("One")
res2: Option[C] = Some(C(B(A(1))))
我会谨慎地假设它会比简单的map
表现更好,即使这样做,如果需要,与噪音和不便相比,该差异也可以忽略不计。 2.11或2.12以及将来的Scala版本的交叉构建,这些版本将修复mapValues
并完全更改视图系统。